如何使用动态资源'magically'将画笔转换为颜色?



我已经根据系统颜色定义了一些画笔资源,如下所示:

<SolidColorBrush 
x:Key="brushKey1" 
Color="{x:Static SystemColors.ControlColor}" 
/>

(这样做是因为某些第三方代码希望找到定义的brushKey1(。

但我注意到以下内容也进行了编译,并且似乎有效:

<SolidColorBrush 
x:Key="brushKey1" 
Color="{DynamicResource {x:Static SystemColors.ControlBrush}}" 
/>

第一个使用COLOR对象,但第二个使用BRUSH。

为什么这样做?DynamicResource是否自动找到了如何进行某种类型的转换?

请注意,这不起作用:

<SolidColorBrush 
x:Key="brushKey1" 
Color="{x:Static SystemColors.ControlBrush}" 
/>

此行将进行编译,但引发运行时异常。

没有魔法或转换。看看Resources,必须有一个以SystemColors.ControlBrush对象为键的条目。

所以在的情况下

<SolidColorBrush x:Key="brushKey1"  Color="{DynamicResource {x:Static SystemColors.ControlBrush}}"/>

您可以从ResourceDictionary中获得条目的"值"。

在另一种情况下

<SolidColorBrush x:Key="brushKey1"  Color="{x:Static SystemColors.ControlBrush}"/>

您尝试分配对象,该对象在ResourceDictionary中用作"密钥"。

编译?对您的brushKey1使用DynamicResource标记扩展引用x:Key{x:Static SystemColors.ControlBrush}的资源。你可以设置任何东西的钥匙。它仍然可以编译。

工作?不可以,除非您定义了x:Key{x:Static SystemColors.ControlBrush}:的Color资源

<Color x:Key="{x:Static SystemColors.ControlBrush}">Red</Color>

最新更新