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

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

<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}" 
   />

该行将编译,但会引发运行时异常。

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

没有魔法或转化。看一下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的{​​{1}}资源。您可以将密钥设置为任何内容。它仍然可以编译。

有效吗?否,除非您定义了{x:Static SystemColors.ControlBrush}Color的{​​{1}}资源,否则:

x:Key
本文链接:https://www.f2er.com/3143605.html

大家都在问