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 XAML 服務及其 XAML 讀取器和 XAML 寫入器執行。 此 XAML 架構內容可以使用 CLR 反映來提供物件圖形建構所需的靜態值。 您指定的 typeName
實際上是 XAML 類型名稱,而不是 CLR 類型名稱,不過在使用預設 XAML 架構內容或使用所有現有 CLR 型 XAML 實作架構時,這些名稱基本上是相同的名稱。
當您 x:Static
參考不是屬性值的型別時,請小心。 在 XAML 處理順序中,標記延伸所提供的值不會叫用額外的值轉換。 即使您的 x:Static
參考會建立文字字串,而且根據文字字串的屬性值值轉換通常會針對該特定成員或傳回型別的任何成員值發生,也是如此。
屬性語法是與這個標記延伸搭配使用的最常見語法。 在 x:Static
識別符字串之後提供的字串令牌會指派為基礎 StaticExtension 擴充類別的 Member 值。
技術上還有兩個可能的其他 XAML 用法。 不過,這些用法較不常見,因為它們是不必要的詳細資訊:
對象專案語法。
<x:Static Member="prefix:typeName.staticMemberName" ... />
具有初始化字串之明確 Member 屬性的屬性語法。
<object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
在 .NET XAML 服務實作中,這個標記延伸的處理是由 StaticExtension 類別所定義。
x:Static
是標記延伸。 XAML 中的所有標記延伸都會在其屬性語法中使用 {
和 }
字元,這是 XAML 處理器辨識標記延伸必須提供值的慣例。 如需標記延伸的詳細資訊,請參閱 XAML 的標記延伸概觀。
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 命名空間和命名空間對應。
另請參閱
- x:Type Markup Extension
- 從 WPF 移轉至 System.Xaml 的
類型