x:Key – direktiva
Jednoznačně identifikuje prvky vytvořené a odkazované ve slovníku definovaném XAML. Přidání x:Key
hodnoty do elementu objektu XAML je nejběžnější způsob, jak identifikovat prostředek ve slovníku prostředků, například ve WPF ResourceDictionary.
Použití atributu XAML
<object x:Key="stringKeyValue".../>
-or-
<object x:Key="{markupExtensionUsage}".../>
Použití atributů XAML (specifické pro WPF)
<object.Resources>
<object x:Key="stringKeyValue".../>
</object.Resources>
-or-
<object.Resources>
<object x:Key="{markupExtensionUsage}".../>
</object.Resources>
Hodnoty XAML
Hodnota | Popis |
---|---|
stringKeyValue |
Textový řetězec, který se má použít jako klíč. Textový řetězec musí odpovídat XamlName Grammar. |
markupExtensionUsage |
V rámci oddělovačů rozšíření značek {}použití rozšíření značek, které poskytuje objekt, který se má použít jako klíč. Viz poznámky. |
Poznámky
x:Key
podporuje koncept slovníku prostředků XAML. XAML jako jazyk nedefinuje implementaci slovníku prostředků, která je ponechána na konkrétních architekturách uživatelského rozhraní. Další informace o tom, jak se slovníky prostředků XAML implementují ve WPF, najdete v tématu Přehled prostředků XAML (WPF .NET).
V xaml 2006 a WPF musí být x:Key
zadán jako atribut. Stále můžete použít klíče bez řetězce, ale to vyžaduje použití rozšíření značek, aby bylo možné zadat hodnotu neřetěžujícího řetězce ve formuláři atributu. Pokud používáte XAML 2009, x:Key
lze zadat jako prvek, aby explicitně podporoval slovníky klíčované jinými typy objektů než řetězce bez nutnosti zprostředkující rozšíření značek. Viz část XAML 2009 v tomto tématu. Zbývající část Poznámky se týká konkrétně implementace XAML 2006.
Hodnota atributu x:Key
může být libovolný řetězec definovaný v XamlName Grammar nebo může být objekt vyhodnocen prostřednictvím rozšíření značek. Příklad z WPF najdete v části Poznámky k využití WPF.
Podřízené prvky nadřazeného elementu, který je IDictionary implementace musí obvykle obsahovat atribut x:Key
, který určuje jedinečnou hodnotu klíče v rámci tohoto slovníku. Rozhraní můžou implementovat vlastnosti klíče aliasu, které nahradí x:Key
u konkrétních typů; typy, které definují takové vlastnosti, by měly být přiřazeny DictionaryKeyPropertyAttribute.
Ekvivalent kódu pro určení x:Key
je klíč, který se používá pro podkladovou IDictionary. Například x:Key
, která se použije v kódu pro prostředek v WPF, je ekvivalentní hodnotě key
parametru ResourceDictionary.Add při přidání prostředku do ResourceDictionary WPF v kódu.
Poznámky k využití WPF
Podřízené objekty nadřazeného objektu, který je IDictionary implementací, například WPF ResourceDictionary, musí obvykle obsahovat atribut x:Key
a hodnota klíče musí být v tomto slovníku jedinečná. Existují dvě výjimky:
Některé typy WPF deklarují implicitní klíč pro použití slovníku. Například Style s TargetTypenebo DataTemplate s DataTypemůže být v ResourceDictionary a použít implicitní klíč.
WPF podporuje koncept slovníku sloučených prostředků. Klíče lze sdílet mezi sloučenými slovníky a chování sdíleného klíče je možné získat přístup pomocí FindResource. Další informace najdete v tématu slovníky sloučených prostředků.
V celkové implementaci WPF XAML a aplikačním modelu není jedinečnost klíče kontrolována kompilátorem značek XAML. Místo toho chybějící nebo neunique x:Key
hodnoty způsobují chyby analyzátoru XAML v čase načítání. Zpracování slovníků pro WPF v sadě Visual Studio ale může tyto chyby často poznamenat ve fázi návrhu.
Všimněte si, že v syntaxi zobrazené je objekt ResourceDictionary implicitní v tom, jak procesor WPF XAML vytvoří kolekci pro naplnění Resources kolekce. ResourceDictionary není obvykle poskytován explicitně jako prvek v revizí, i když může být v některých případech, pokud by to chtěla být srozumitelnost (jedná se o prvek objektu kolekce mezi elementem vlastnosti Resources a položkami v rámci daného slovníku). Informace o tom, proč objekt kolekce je téměř vždy implicitní prvek v revizí, naleznete v tématu syntaxe XAML podrobně.
V implementaci WPF XAML je zpracování klíčů slovníku prostředků definováno ResourceKey abstraktní třídou. Procesor WPF XAML ale vytváří různé základní typy rozšíření pro klíče na základě jejich použití. Například klíč pro DataTemplate nebo jakoukoli odvozenou třídu se zpracovává samostatně a vytváří jedinečný objekt DataTemplateKey.
Klíče a názvy používají v základní definici XAML různé direktivy a prvky jazyka (x:Key
a x:Name
). Klíče a názvy se také používají v různých situacích definicí WPF a aplikací těchto konceptů. Podrobnosti najdete v tématu WPF XAML Namescopes.
Jak jsme uvedli dříve, hodnota klíče lze zadat prostřednictvím rozšíření značek a může být jiná než řetězcová hodnota. Příkladem scénáře WPF je, že hodnota x:Key
může být ComponentResourceKey. Některé ovládací prvky zpřístupňují klíč stylu tohoto typu pro prostředek vlastního stylu, který ovlivňuje část vzhledu a chování tohoto ovládacího prvku bez úplné nahrazení stylu. Příkladem takového klíče je ButtonStyleKey.
Funkce sloučeného slovníku WPF zavádí další důležité informace o jedinečnosti klíče a chování vyhledávání klíčů. Další informace najdete v tématu slovníky sloučených prostředků.
XAML 2009
XAML 2009 uvolní omezení, které x:Key
vždy poskytovat ve formě atributu.
Ve WPF můžete použít funkce XAML 2009, ale pouze pro XAML, který není zkompilován značek. Kód XAML zkompilovaný pro WPF a formát BAML XAML v současné době nepodporují klíčová slova a funkce XAML 2009.
V části XAML 2009 můžete zadat x:Key
elementy pomocí následujícího použití:
Použití elementu XAML (pouze XAML 2009)
<object>
<x:Key>
keyObject
</x:Key>
...
</object>
Hodnoty XAML
Hodnota | Popis |
---|---|
keyObject |
Object element pro objekt, který se používá jako klíč pro danou object ve specializovaném slovníku. |
Tady se nezobrazuje kontejner nebo nadřazený objekt pro tento druh použití.
object
se očekává, že bude podřízeným prvkem objektu, který představuje specializovanou implementaci slovníku.keyObject
se očekává, že se jedná o instanci objektu (nebo hodnotu typu hodnoty), která je vhodná jako klíč pro konkrétní specializovanou implementaci slovníku.WPF neimplementuje slovníky, které vyžadují toto použití. Klíče objektů jsou obecnější funkcí jazyka XAML, což může být užitečné pro určité scénáře vlastního slovníku, ve kterých je žádoucí vytvořit slovník v jazyce XAML. U funkcí WPF, jako jsou implicitní styly, které pro prostředky používají jiné než řetězcové klíče, existují jiné techniky pro vytvoření nebo zadání klíčů, takže použití klíče objektu není nutné.
keyObject
může být také použití rozšíření značek ve formuláři elementu objektu místo přímé instance objektu.
Poznámky k používání silverlightu
x:Key
pro Silverlight je dokumentován samostatně. Další informace najdete v tématu Funkce jazyka XAML (x:) Language Features (Silverlight).
Viz také
.NET Desktop feedback