簡體   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