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
指定為專案,以明確支援以字串以外的物件類型為索引鍵的字典,而不需要標記延伸中繼。 請參閱本主題中的
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 類型會宣告字典使用方式的隱含索引鍵。 例如,具有 TargetType的 Style,或是具有 DataType的 DataTemplate,可以在 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:Key
與 x: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)。