x:Static 標記延伸

參考以與 Common Language Specification (CLS) 相容的方式定義之任何靜態值程式碼實體。 參考的靜態屬性可以用來提供 XAML 中的屬性值。

XAML 屬性使用方式

<object property="{x:Static prefix:typeName.staticMemberName}" .../>

XAML 值

prefix

選擇項。 參考至對應、非預設之 XAML 命名空間的前置詞。 prefix 以此使用方式明確地顯示,這是因為您很少會參考來自預設 XAML 命名空間的靜態屬性。 請參閱「備註」。

typeName

必要項。 定義所需靜態成員之型別的名稱。

staticMemberName

必要項。 所需靜態值成員的名稱 (常數、靜態屬性、欄位或列舉值)。

備註

參考的程式碼實體必須是下列其中一項:

  • 常數

  • 靜態屬性

  • 欄位

  • 列舉值

指定其他任何程式碼實體,例如非靜態屬性,會造成 XAML 進行標記編譯時的編譯錯誤,或是 XAML 載入時間例外狀況。

您可以建立 x:Static 參考,這個參考的對象可以是不在目前 XAML 文件之預設 XAML 命名空間內的靜態欄位或屬性,但是這樣需要前置詞對應。 XAML 命名空間幾乎永遠都會在 XAML 文件的根項目上定義。

在以預設 XAML 結構描述內容執行時,靜態屬性的查閱作業,可以由 .NET Framework XAML Services 及其 XAML 讀取器和 XAML 寫入器來執行。 此 XAML 結構描述內容可使用 CLR 反映來提供物件圖形建構必要的靜態值。 您指定的 typeName 實際上是 XAML 型別名稱,而不是 CLR 型別名稱,儘管在使用預設 XAML 結構描述內容時,或在使用所有現有基於 CLR 的 XAML 實作架構時,這些名稱基本上都相同。

建立不是屬性值直接型別的 x:Static 參考時,請小心進行。 在 XAML 處理序列中,提供標記延伸中的值不會叫用其他的值轉換。 即使您的 x:Static 參考會造成文字字串,而且通常會針對該特定成員或傳回型別的任何成員值,發生根據文字字串的屬性值的值轉換,也依然是如此。

屬性 (Attribute) 語法是最常配合這個標記延伸使用的語法。 x:Static 識別項字串後提供的字串語彙基元,是指派做為基礎 StaticExtension 延伸類別的 Member 值。

有兩個技術上可能的其他 XAML 使用方式。 不過,這些使用方式較不常見,因為它們具有不必要地詳細資訊:

物件項目語法:<x:Static Member="prefix:typeName.staticMemberName" .../>

初始化字串之運用明確成員屬性 (Property) 的屬性 (Attribute) 語法:<object property="{x:Static Member=prefix:typeName.staticMemberName}" .../>

在 .NET Framework XAML Services 實作中,此標記延伸的處理是由 StaticExtension 類別所定義。

x:Static 是一種標記延伸。 XAML 中的所有標記延伸都會在其屬性 (Attribute) 語法中使用 { 與 } 字元,此慣例讓 XAML 處理器知道某個標記延伸必須提供值。 如需標記延伸的詳細資訊,請參閱XAML 標記延伸概觀

WPF 使用注意事項

您要用於 WPF 程式設計的預設 XAML 命名空間不包含許多有用的靜態屬性,大多數有用的靜態屬性都有型別轉換子之類的支援,可便於使用而不需要 {x:Static}。 對於靜態屬性,如果下列其中一項成立,您就必須對應 XAML 命名空間的前置詞:

  • 您所參考的型別存在於 WPF 中,但不是 WPF (https://schemas.microsoft.com/winfx/2006/xaml/presentation) 之預設 XAML 命名空間的一部分。 這是使用 x:Static 的常見情形。 例如,您可能會使用 x:Static 參考,運用對應至 System CLR 命名空間和 mscorlib 組件的 XAML 命名空間對應,以參考 Environment 類別的靜態屬性。

  • 您從自訂組件 (Assembly) 參考型別。

  • 您參考存在於 WPF 組件中的型別,但該型別位於 CLR 命名空間內,而此命名空間未對應為 WPF 預設 XAML 命名空間的一部分。 CLR 命名空間到 WPF 預設 XAML 命名空間的對應是由不同 WPF 組件中的定義所執行 (如需此概念的詳細資訊,請參閱 WPF XAML 的 XAML 命名空間和命名空間對應)。 如果 CLR 命名空間的絕大部分都由通常不為 XAML 所用的類別定義組成,例如 System.Windows.Threading,就不能存在非對應的 CLR 命名空間。

如需如何使用 WPF 之前置詞和 XAML 命名空間的詳細資訊,請參閱 WPF XAML 的 XAML 命名空間和命名空間對應

請參閱

參考

x:Type 標記延伸

其他資源

從 WPF 移轉至 System.Xaml 的型別