天天看點

XAML 标記擴充

開發工具與關鍵技術:Visual Studio C# Window應用程式

作者:翁一凱

撰寫時間:2021/9/18

XAML标記擴充

一、标記擴充(Markup Extensions)

1、實際項目中為XAML控件屬性指派經常遇到:

·設計時屬性之處于未知狀态

·運作時才能擷取到

2、輕松實作XAML頁面屬性指派,資源引用,類型轉換等操作

二、特定于 WPF 的标記擴充

WPF 程式設計中最常用的标記擴充是支援資源引用的标記擴充(StaticResource 和

DynamicResource),和支援資料綁定的标記擴充 (Binding)。

StaticResource 通過替換已定義資源的值來為屬性提供值。 StaticResource 計算最終在 XAML 加載時進行,并且在運作時沒有通路對象圖的權限。

DynamicResource 通過将值推遲為對資源的運作時引用來為屬性提供值。 動态資源引用強制在每次通路此類資源時都進行新查找,且在運作時有權通路對象圖。 為了擷取此通路權限,WPF 屬性系統中的依賴項屬性和計算出的表達式支援DynamicResource 概念。 是以,隻能對依賴項屬性目标使用 DynamicResource。

Binding 使用在運作時應用于父對象的資料上下文來為屬性提供資料綁定值。 此标記擴充相對複雜,因為它會啟用大量内聯文法來指定資料綁定。

RelativeSource 提供的源資訊 Binding ,該資訊可在運作時對象樹中導航幾個可能的關系。 對于在多用途模闆中建立的綁定,或在未充分了解周圍的對象樹的情況下以代碼建立的綁定,此标記擴充為其提供專用源。

TemplateBinding 使控件模闆能夠使用模闆化屬性的值,這些屬性來自于将使用該模闆的類的對象模型定義屬性。 換言之,模闆定義中的屬性可通路僅在應用了模闆之後才存在的上下文。 有關詳細資訊,請參閱 TemplateBinding 标記擴充。

ColorConvertedBitmap 支援相對進階的映像方案。

ComponentResourceKey 和 ThemeDictionary 支援資源查找的各個方面,特别是支

持查找與自定義控件一起打包的資源和主題。

XAML 标記擴充

1、Binding(XAML載入時,将資料綁定到XAML對象)

2、StaticResorce(引用資料字典中定義的靜态資源)

3、TemplateBinding(XAML頁面中對象模闆綁定調用)

4、RelativeSource(對特定資料源引用)

XAML 标記擴充

(1)使用self模式

·目标對象将作為源對象綁定到自身

·可以實作同一對象元素不同屬性之間的綁定操作

(2)使用TemplatedParent模式

·僅在ControlTemplate(控件模闆) 或者DataTemplate (資料模闆)下有效

·不同的模闆,将傳回不同類型的綁定結果