我已经根据系统颜色定义了一些画笔资源,如下所示:
<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>