共用方式為


x:Key 指示詞

唯一識別在 XAML 定義字典中建立和參考的專案。 將 x:Key 值新增至 XAML 物件項目是識別資源字典中資源最常見的方式,例如 WPF ResourceDictionary

XAML 屬性使用方式

<object x:Key="stringKeyValue".../>  
-or-  
<object x:Key="{markupExtensionUsage}".../>  

XAML 屬性使用方式 (WPF 特定)

<object.Resources>  
  <object x:Key="stringKeyValue".../>  
</object.Resources>  
-or-  
<object.Resources>  
  <object x:Key="{markupExtensionUsage}".../>  
</object.Resources>  

XAML 值

價值 描述
stringKeyValue 要當做索引鍵使用的文字字串。 文字字串必須符合 XamlName 文法
markupExtensionUsage 在標記延伸分隔符中 {},此標記延伸使用方式會提供物件做為索引鍵。 請參閱。

言論

x:Key 支援 XAML 資源字典概念。 XAML 作為語言不會定義資源字典實作,而該實作會留給特定的 UI 架構。 若要深入瞭解如何在 WPF 中實作 XAML 資源字典,請參閱 XAML 資源概觀 (WPF .NET)

在 XAML 2006 和 WPF 中,必須提供 x:Key 做為屬性。 您仍然可以使用非字串索引鍵,但這需要標記延伸使用方式,才能以屬性形式提供非字串值。 如果您使用 XAML 2009,可以將 x:Key 指定為專案,以明確支援以字串以外的物件類型為索引鍵的字典,而不需要標記延伸中繼。 請參閱本主題中的一節。 一節的其餘部分特別適用於 XAML 2006 實作。

x:Key 的屬性值可以是 XamlName 文法 中定義的任何字串,也可以是透過標記延伸評估的物件。 如需 WPF 的範例,請參閱

屬於 IDictionary 實作之父元素的子元素通常必須包含指定該字典內唯一索引鍵值的 x:Key 屬性。 架構可能會實作別名索引鍵屬性,以取代特定類型上的 x:Key;定義這類屬性的類型應該以 DictionaryKeyPropertyAttribute屬性。

指定 x:Key 的程式代碼相當於用於基礎 IDictionary的索引鍵。 例如,當您在程式代碼中將資源新增至 WPF ResourceDictionary 時,套用在 WPF 資源標記中的 x:Key 相當於 ResourceDictionary.Addkey 參數的值。

WPF 使用方式注意事項

屬於 IDictionary 實作之父物件的子物件,例如 WPF ResourceDictionary,通常必須包含 x:Key 屬性,而且索引鍵值在該字典中必須是唯一的。 有兩個值得注意的例外狀況:

  • 某些 WPF 類型會宣告字典使用方式的隱含索引鍵。 例如,具有 TargetTypeStyle,或是具有 DataTypeDataTemplate,可以在 ResourceDictionary 中使用隱含索引鍵。

  • WPF 支援合併的資源字典概念。 索引鍵可以在合併字典之間共用,而且可以使用 FindResource來存取共用索引鍵行為。 如需詳細資訊,請參閱合併資源字典。

在整體 WPF XAML 實作和應用程式模型中,XAML 標記編譯程式不會檢查索引鍵唯一性。 相反地,遺漏或非統一 x:Key 值會導致載入時間的 XAML 剖析器錯誤。 不過,Visual Studio 處理 WPF 的字典通常會在設計階段注意到這類錯誤。

請注意,在顯示的語法中,ResourceDictionary 物件隱含於 WPF XAML 處理器產生集合以填入 Resources 集合的方式。 ResourceDictionary 通常不是在標記中明確提供做為元素,不過在某些情況下,如果想要清楚起見,它可以是集合物件元素,Resources 屬性元素與填入字典內的項目之間。 如需為何集合物件幾乎一律是標記中隱含項目的詳細資訊,請參閱 XAML 語法詳細

在 WPF XAML 實作中,資源字典索引鍵的處理是由 ResourceKey 抽象類所定義。 不過,WPF XAML 處理器會根據其使用方式,為索引鍵產生不同的基礎擴充類型。 例如,會分別處理 DataTemplate 或任何衍生類別的索引鍵,併產生不同的 DataTemplateKey 物件。

索引鍵和名稱在基本 XAML 定義中使用不同的指示詞和語言元素(x:Keyx:Name)。 WPF 定義和這些概念的應用程式也會在不同的情況下使用索引鍵和名稱。 如需詳細資訊,請參閱 WPF XAML Namescopes

如先前所述,索引鍵的值可以透過標記延伸提供,而且可以是字串值以外的值。 WPF 案例的範例是,x:Key 的值可能是 ComponentResourceKey。 某些控件會針對自定義樣式資源公開該類型的樣式索引鍵,該資源會影響該控件的部分外觀和行為,而不會完全取代樣式。 這類索引鍵的範例是 ButtonStyleKey

WPF 合併字典功能引進了索引鍵唯一性和索引鍵查閱行為的其他考慮。 如需詳細資訊,請參閱合併資源字典。

XAML 2009

XAML 2009 會放寬 x:Key 一律以屬性形式提供的限制。

在 WPF 中,您可以使用 XAML 2009 功能,但僅適用於未編譯標記的 XAML。 WPF 和 BAML 形式的標記編譯 XAML 目前不支援 XAML 2009 關鍵詞和功能。

在 XAML 2009 下,您可以透過下列使用方式指定 x:Key 元素:

XAML 元素使用方式 (僅限 XAML 2009)

<object>  
  <x:Key>  
keyObject  
  </x:Key>  
...  
</object>  

XAML 值

價值 描述
keyObject 物件之物件專案,做為特製化字典中指定 object 的索引鍵。
  • 這種用途的容器/父代不會在此顯示。 object 必須是代表特殊字典實作之對象專案的子系。 keyObject 必須是對象實例(或實值型別的值),適合做為該特定特製化字典實作的索引鍵。

  • WPF 不會實作需要此用法的字典。 物件索引鍵是 XAML 語言的一般功能,對於在 XAML 中建立字典的特定自定義字典案例可能很有用。 對於使用非字串索引鍵的資源之隱含樣式等 WPF 功能,建立或指定索引鍵的其他技術存在,因此不需要使用物件索引鍵。

  • keyObject 也可以是對象專案形式的標記延伸用法,而不是直接物件實例。

Silverlight 使用量注意事項

Silverlight 的 x:Key 會個別記載。 如需詳細資訊,請參閱 XAML 命名空間 (x:) 語言功能 (Silverlight)

另請參閱