[英]How does using DynamicResource 'magically' convert a brush to a color?
我在系统 colors 方面定义了一些画笔资源,如下所示:
<SolidColorBrush
x:Key="brushKey1"
Color="{x:Static SystemColors.ControlColor}"
/>
(这样做是因为一些第三方代码希望找到定义的brushKey1
)。
但我注意到以下内容也可以编译并且似乎可以工作:
<SolidColorBrush
x:Key="brushKey1"
Color="{DynamicResource {x:Static SystemColors.ControlBrush}}"
/>
第一个使用 COLOR object,但第二个使用 BRUSH。
为什么这行得通? DynamicResource
是否会自动计算出如何进行某种类型的转换或转换?
请注意,这不起作用:
<SolidColorBrush
x:Key="brushKey1"
Color="{x:Static SystemColors.ControlBrush}"
/>
此行将编译但会引发运行时异常。
没有魔法或转换。 查看Resources
,必须有一个以SystemColors.ControlBrush
object 作为键的条目。
所以万一
<SolidColorBrush x:Key="brushKey1" Color="{DynamicResource {x:Static SystemColors.ControlBrush}}"/>
您从ResourceDictionary
获得条目的“价值”。
在另一种情况下
<SolidColorBrush x:Key="brushKey1" Color="{x:Static SystemColors.ControlBrush}"/>
您尝试分配 object,它在ResourceDictionary
中用作“键”。
编译? 是的。 您的brushKey1
使用DynamicResource
标记扩展引用了一个x:Key
为{x:Static SystemColors.ControlBrush}
的资源。 你可以设置任何东西的钥匙。 它仍然会编译。
作品? 不,除非您使用{x:Static SystemColors.ControlBrush}
的x:Key
定义了Color
资源:
<Color x:Key="{x:Static SystemColors.ControlBrush}">Red</Color>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.