-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Use ComponentResourceKey instead of strings to identify resources #3918
Copy link
Copy link
Open
Labels
enhancementevaluation requiredItems is pending review or evaluation by the teamItems is pending review or evaluation by the team
Description
Is your feature request related to a problem? Please describe.
- Currently resources are identified using strings. The string can only be validated at runtime and not while writing the XAML code
- When a resource key changes in a new version, the compiler does not indicate a problem and we get an Exception at runtime
Describe the solution you'd like
- Using
ComponentResourceKeywould make resources type-save - Optional: preserve the existing string-based resource keys for backward-compatibility, or increase the version number because of breaking changes
Describe alternatives you've considered
- Don't know a better way
Additional context
To create the resource key, you need to create a Component resource key in a static class:
public static partial class MaterialDesignColors
{
public static ComponentResourceKey Primary50Color { get; } = new(typeof(MaterialDesignColors), nameof(Primary50Color));
// ...
}When declaring the resource in the ResouceDictionary, use the ComponentResourceKey as Key:
<Color Key="{x:Static md:MaterialDesignColors.Primary50Color}" ... />When using the resource, we can now use a static reference that is checked by the compiler:
<Brush Color="{DynamicResource {x:Static md:MaterialDesignColors.Primary50Color}}" ... />Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementevaluation requiredItems is pending review or evaluation by the teamItems is pending review or evaluation by the team