x:Static 標記延伸
參考以 Common Language Specification (CLS) 相容方式定義的任何靜態位元組程式碼實體。 參考的靜態屬性可用來在 XAML 中提供屬性的值。
XAML Attribute Usage
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
XAML 值
值 | Description |
---|---|
prefix |
選擇性。 參考對應、非預設 XAML 命名空間的前置詞。 prefix 會在使用方式中明確顯示,因為您很少參考來自預設 XAML 命名空間的靜態屬性。 請參閱<備註>。 |
typeName |
必要。 定義所需靜態成員的類型名稱。 |
staticMemberName |
必要。 所需靜態值成員的名稱(常數、靜態屬性、欄位或列舉值)。 |
備註
參考的程式碼實體必須是下列其中一項:
- 常數
- 靜態屬性
- 欄位
- 列舉值
指定任何其他程式碼實體,例如非靜態屬性,如果 XAML 已編譯標記,或 XAML 載入時間剖析例外狀況,則會導致編譯時期錯誤。
您可以 x:Static
參考不在目前 XAML 檔的預設 XAML 命名空間中的靜態欄位或屬性;不過,這需要前置詞對應。 XAML 命名空間幾乎一律定義在 XAML 檔的根項目上。
當靜態屬性使用預設 XAML 架構內容執行時,靜態屬性的查閱作業可由 .NET XAML 服務及其 XAML 讀取器和 XAML 寫入器執行。 此 XAML 架構內容可以使用 CLR 反映來提供物件圖形建構所需的靜態值。 typeName
您指定的 實際上是 XAML 類型名稱,而不是 CLR 類型名稱,不過在使用預設 XAML 架構內容或使用所有現有 CLR 型 XAML 實作架構時,這些名稱基本上是相同的名稱。
當您進行 x:Static
不是直接屬性值類型的參考時,請小心。 在 XAML 處理順序中,標記延伸所提供的值不會叫用額外的值轉換。 即使您 x:Static
的參考建立文字字串,而且根據文字字串的屬性值轉換值,通常也會針對該特定成員或傳回型別的任何成員值發生。
屬性 (Attribute) 語法是最常搭配這個標記延伸來使用的語法。 x:Static
識別項字串後所提供的字串語彙基元,是指派做為基礎 Member 延伸類別的 StaticExtension 值。
技術上還有兩個可能的其他 XAML 用法。 不過,這些用法較不常見,因為它們是不必要的詳細資訊:
物件專案語法。
<x:Static Member="prefix:typeName.staticMemberName" ... />
具有初始化字串之明確 Member 屬性的屬性語法。
<object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
在 .NET XAML 服務實作中,這個標記延伸的處理是由 StaticExtension 類別所定義。
x:Static
是一種標記延伸。 XAML 中的所有標記延伸都會在其 {
屬性語法中使用 和 }
字元,這是 XAML 處理器辨識標記延伸必須提供值的慣例。 如需標記延伸的詳細資訊,請參閱 Markup Extensions for XAML Overview。
WPF 使用方式注意事項
您用於 WPF 程式設計的預設 XAML 命名空間不包含許多有用的靜態屬性,而且大部分有用的靜態屬性都有支援,例如類型轉換器,可協助使用,而不需要 {x:Static}
。 如果是靜態屬性,如果下列其中一項為 true,您必須對應 XAML 命名空間的前置詞:
您正在參考 WPF 中存在的型別,但不屬於 WPF 的預設 XAML 命名空間 (
http://schemas.microsoft.com/winfx/2006/xaml/presentation
)。 這是使用x:Static
的相當常見的案例。 例如,您可以使用x:Static
XAML 命名空間對應至 System CLR 命名空間和 mscorlib 元件的參考,以參考 類別的 Environment 靜態屬性。您正在從自訂群組件參考類型。
您參考存在於 WPF 元件中的類型,但該類型位於未對應為 WPF 預設 XAML 命名空間的 CLR 命名空間內。 CLR 命名空間對應至 WPF 的預設 XAML 命名空間是由各種 WPF 元件中的定義所執行(如需此概念的詳細資訊,請參閱 WPF XAML 的 XAML 命名空間和命名空間對應)。 如果 CLR 命名空間是由通常不適合 XAML 的類別定義所組成,則非對應的 CLR 命名空間可能會存在,例如 System.Windows.Threading 。
如需如何使用 WPF 前置詞和 XAML 命名空間的詳細資訊,請參閱 WPF XAML 的 XAML 命名空間和命名空間對應。