繁体   English   中英

使用 DynamicResource 如何“神奇地”将画笔转换为颜色?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM