我已经根据系统颜色定义了一些画笔资源,如下所示:
<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}"
/>
该行将编译,但会引发运行时异常。
答案 0 :(得分:0)
没有魔法或转化。看一下Resources
,必须有一个以SystemColors.ControlBrush
对象为键的条目。
以防万一
<SolidColorBrush x:Key="brushKey1" Color="{DynamicResource {x:Static SystemColors.ControlBrush}}"/>
您从ResourceDictionary
获得条目的“值”。
在另一种情况下
<SolidColorBrush x:Key="brushKey1" Color="{x:Static SystemColors.ControlBrush}"/>
您尝试分配对象,该对象在ResourceDictionary
中被用作“键”。
答案 1 :(得分:0)
编译?是。您的brushKey1
使用DynamicResource
标记扩展名引用了x:Key
的{{1}}资源。您可以将密钥设置为任何内容。它仍然可以编译。
有效吗?否,除非您定义了{x:Static SystemColors.ControlBrush}
为Color
的{{1}}资源,否则:
x:Key