藉由將該值延遲為已定義資源的參考,可為任何 XAML 屬性提供值。 該資源的查詢行為類似於執行階段查詢。
XAML 屬性使用方式
<object property="{DynamicResource key}" ... />
XAML 屬性元素使用方式
<object>
<object.property>
<DynamicResource ResourceKey="key" ... />
</object.property>
</object>
XAML 值
價值觀 | 說明 |
---|---|
key |
所要求資源的密鑰。 如果資源是在標記中建立,則此索引鍵最初由 x:索引鍵指示詞指派,如果資源在程式碼中建立,則在呼叫 ResourceDictionary.Add 時作為 key 參數提供。 |
備註
DynamicResource
會在初始編譯期間建立暫存運算式,因此延遲查閱資源,直到實際需要要求的資源值才能建構物件。 這可能是在載入 XAML 頁面之後發生。 系統會根據從目前頁面範圍開始之所有使用中資源字典的索引鍵搜尋來找到資源值,並取代編譯中的預留位置運算式。
這很重要
就相依性屬性優先順序而言, DynamicResource
運算式相當於套用動態資源參考的位置。 如果您為先前有 DynamicResource
運算式的屬性設定本機值作為本機值,則會完全移除 DynamicResource
。 如需詳細資訊,請參閱相依性屬性值優先順序。
某些資源存取案例特別適用於 DynamicResource
,而不是 StaticResource 標記延伸。 如需 DynamicResource
和StaticResource
的相對優點和效能影響的討論,請參閱 XAML 資源 。
指定的 ResourceKey 應對應至頁面、應用程式、可用控件佈景主題和外部資源,或系統資源的某些層級 x:Key 指示詞所決定的現有資源,而資源查詢會依該順序進行。 如需靜態和動態資源資源資源查詢的詳細資訊,請參閱 XAML 資源。
資源索引鍵可以是 XamlName 文法 中定義的任何字串。 資源索引鍵也可能是其他物件類型,例如 Type。 Type 索引鍵是如何依佈景主題設定控件樣式的基礎。 如需詳細資訊,請參閱控制項撰寫概觀。
查詢資源值的 API,例如 FindResource,請遵循與 DynamicResource
所使用的相同資源查詢邏輯。
引用資源的另類聲明方式是作為 StaticResource 標記延伸 。
屬性 (Attribute) 語法是最常搭配這個標記延伸來使用的語法。 TemplateBinding
識別項字串後所提供的字串語彙基元,是指派做為基礎 Property 延伸類別的 TemplateBindingExtension 值。
DynamicResource
可能也會用於物件元素語法中。 在此情況下,需要指定 ResourceKey 屬性值。
TemplateBinding
也可以用於會指定 Property 屬性 (Property) 做為 property=value 配對組的詳細屬性 (Attribute) 使用方式中。
<object property="{DynamicResource ResourceKey=key}" ... />
詳細使用方式通常是適用於具有一個以上可設定屬性或有些屬性為選擇性屬性的標記延伸。 因為 TemplateBinding
只有一個必要的可設定屬性,所以這種詳細使用方式並不常見。
在 WPF XAML 處理器實作中,此標記延伸的處理由 TemplateBindingExtension 類別定義。
DynamicResource
是標記延伸。 當需要轉義屬性值,使其不同於字面值或處理程式名稱時,通常會實作標記擴展。此需求比僅僅在特定類型或屬性上使用型別轉換器更加全域化。 所有 XAML 標記延伸都會在其屬性語法中使用 { 與 } 字元,這個慣例讓 XAML 處理器知道某個標記延伸必須處理這個屬性。 如需詳細資訊,請參閱標記延伸和 WPF XAML。