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