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 用法。 不過,這些用法較不常見,因為它們是不必要的詳細資訊:

  1. 物件專案語法。

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. 具有初始化字串之明確 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 命名空間和命名空間對應。

另請參閱