x:Key — dyrektywa
Unikatowo identyfikuje elementy, które są tworzone i przywoływyne w słowniku zdefiniowanym przez XAML. Dodawanie wartości x:Key do elementu obiektu XAML jest najbardziej powszechnym sposobem identyfikowania zasobu w słowniku zasobów, na przykład w WPF ResourceDictionary.
Użycie atrybutu języka XAML
<object x:Key="stringKeyValue".../>
-or-
<object x:Key="{markupExtensionUsage}".../>
Użycie atrybutów XAML (specyficzne dla WPF)
<object.Resources>
<object x:Key="stringKeyValue".../>
</object.Resources>
-or-
<object.Resources>
<object x:Key="{markupExtensionUsage}".../>
</object.Resources>
Wartości XAML
| Wartość | Opis |
|---|---|
stringKeyValue |
Ciąg tekstowy, który ma być kluczem. Ciąg tekstowy musi być zgodny z gramatyką XamlName. |
markupExtensionUsage |
W ramach ograniczników rozszerzenia znaczników {}użycie rozszerzenia znaczników, które udostępnia obiekt do użycia jako klucz. Zobacz uwagi. |
Uwagi
x:Key obsługuje koncepcję słownika zasobów XAML. Język XAML jako język nie definiuje implementacji słownika zasobów, która pozostaje w określonych platformach interfejsu użytkownika. Aby dowiedzieć się więcej na temat sposobu implementować słowniki zasobów XAML w WPF, zobacz Omówienie zasobów XAML (WPF .NET).
W xaml 2006 i WPF, x:Key musi być podany jako atrybut. Nadal można używać kluczy niepociągowych, ale wymaga to użycia rozszerzenia znaczników w celu podania wartości niepociągowej w postaci atrybutu. Jeśli używasz języka XAML 2009, x:Key można go określić jako element, aby jawnie obsługiwać słowniki z kluczami przez typy obiektów inne niż ciągi bez konieczności stosowania pośredniego rozszerzenia znaczników. Zobacz sekcję "XAML 2009" w tym temacie. Pozostała część sekcji Uwagi dotyczy w szczególności implementacji XAML 2006.
Wartość atrybutu może być x:Key dowolnym ciągiem zdefiniowanym w gramatyce XamlName lub może być obiektem obliczany za pomocą rozszerzenia znaczników. Zobacz "Uwagi dotyczące użycia WPF", aby uzyskać przykład z platformy WPF.
Elementy podrzędne elementu nadrzędnego, który jest IDictionaryx:Key implementacją, zwykle muszą zawierać atrybut określający unikatową wartość klucza w tym słowniku. Struktury mogą implementować aliasowane właściwości klucza, aby x:Key zastąpić je określonymi typami. Typy definiujące takie właściwości powinny być przypisywane za pomocą .DictionaryKeyPropertyAttribute
Kod równoważny określaniu jest x:Key kluczem używanym dla bazowego .IDictionary Na przykład element x:Key stosowany w znacznikach dla zasobu w WPF keyResourceDictionary.Add jest odpowiednikiem wartości parametru podczas dodawania zasobu do WPF ResourceDictionary w kodzie.
Uwagi dotyczące użycia WPF
Obiekty podrzędne obiektu nadrzędnego IDictionary , który jest implementacją, takie jak WPF ResourceDictionary, x:Key zwykle muszą zawierać atrybut, a wartość klucza musi być unikatowa w tym słowniku. Istnieją dwa niesłychane wyjątki:
Niektóre typy WPF deklarują klucz niejawny do użycia w słowniku. Na przykład element z Style elementem TargetTypelub z DataTemplate elementem DataTypemoże być w a ResourceDictionary i używać klucza niejawnego.
WPF obsługuje koncepcję scalonego słownika zasobów. Klucze mogą być współużytkcyjne między scalanych słowników, a dostęp do zachowania klucza wspólnego można uzyskać za pomocą .FindResource Aby uzyskać więcej informacji, zobacz Scalone słowniki zasobów.
W ogólnej implementacji xaml WPF i modelu aplikacji unikatowość klucza nie jest sprawdzana przez kompilator znaczników XAML. Zamiast tego brakujące lub inne wartości x:Key powodują błędy parsera XAML czasu ładowania. Jednak Visual Studio słowników dla WPF często może zanotować takie błędy w fazie projektowania.
Należy pamiętać, że w przedstawionej składni ResourceDictionary obiekt jest niejawny w sposobu, w jaki procesor XAML WPF tworzy kolekcję w celu wypełnienia kolekcji Resources . Element ResourceDictionary nie jest zwykle dostarczany jawnie jako element w znacznikach, chociaż w niektórych przypadkach może być to konieczne w celu zapewnienia przejrzystości ( Resources byłby to element obiektu kolekcji między elementem właściwości i elementami w tym słowniku). Aby uzyskać informacje o tym, dlaczego obiekt kolekcji jest prawie zawsze niejawnym elementem znaczników, zobacz Szczegóły składni XAML.
W implementacji języka XAML WPF obsługa kluczy słownika zasobów jest definiowana przez klasę ResourceKey abstrakcyjną. Jednak procesor XAML WPF generuje różne typy bazowych rozszerzeń dla kluczy na podstawie ich użycia. Na przykład klucz klasy lub DataTemplate dowolnej klasy pochodnej jest obsługiwany oddzielnie i tworzy odrębny DataTemplateKey obiekt.
Klucze i nazwy używają różnych dyrektyw i elementów języka (x:Key w porównaniu x:Namez ) w podstawowej definicji XAML. Klucze i nazwy są również używane w różnych sytuacjach przez definicję I zastosowanie tych pojęć WPF. Aby uzyskać szczegółowe informacje, zobacz WPF XAML Namescopes (Zakresy nazw XAML WPF).
Jak wspomniano wcześniej, wartość klucza może być dostarczana za pośrednictwem rozszerzenia znaczników i może być inna niż wartość ciągu. Przykładowy scenariusz WPF jest to, że wartość x:Key może być ComponentResourceKey. Niektóre kontrolki uwidoczniają klucz stylu tego typu dla zasobu stylu niestandardowego, który wpływa na część wyglądu i zachowania tej kontrolki bez całkowitego zastępowania stylu. Przykładem takiego klucza jest ButtonStyleKey.
Funkcja scalonego słownika WPF wprowadza dodatkowe zagadnienia dotyczące unikatowości klucza i zachowania wyszukiwania klucza. Aby uzyskać więcej informacji, zobacz Scalone słowniki zasobów.
XAML 2009
Xaml 2009 złagodnia ograniczenia, które zawsze x:Key są udostępniane w postaci atrybutu.
W WPF można używać funkcji XAML 2009, ale tylko dla języka XAML, który nie jest kompilowany za pomocą znaczników. Kod XAML skompilowany na podstawie znaczników dla platformy WPF i formularz BAML języka XAML nie obsługują obecnie słów kluczowych i funkcji języka XAML 2009.
W obszarze XAML 2009 można określić elementy x:Key za pomocą następującego użycia:
Użycie elementu XAML (tylko XAML 2009)
<object>
<x:Key>
keyObject
</x:Key>
...
</object>
Wartości XAML
| Wartość | Opis |
|---|---|
keyObject |
Object, element dla obiektu, który jest używany jako klucz dla danej w object wyspecjalizowanym słowniku. |
Kontener/element nadrzędny dla tego rodzaju użycia nie jest wyświetlany w tym miejscu.
objectObiekt powinien być elementem podrzędnym elementu obiektu, który reprezentuje wyspecjalizowaną implementację słownika.keyObjectOczekuje się, że będzie wystąpieniem obiektu (lub wartością typu wartości), które jest odpowiednie jako klucz dla tej konkretnej implementacji wyspecjalizowanego słownika.WPF nie implementuje słowników, które wymagają tego użycia. Klucze obiektów to bardziej ogólna funkcja języka XAML, która może być przydatna w przypadku niektórych niestandardowych scenariuszy słowników, w których pożądane jest utworzenie słownika w języku XAML. W przypadku funkcji WPF, takich jak niejawne style, które używają kluczy innych niż ciągi dla zasobów, istnieją inne techniki ustanawiania lub określania kluczy, więc użycie klucza obiektu nie jest konieczne.
keyObjectMoże to być również użycie rozszerzenia znaczników w postaci elementu obiektu, a nie bezpośrednie wystąpienie obiektu.
Uwagi dotyczące użycia silverlight
x:Key Program dla programu Silverlight jest dokumentowany oddzielnie. Aby uzyskać więcej informacji, zobacz Przestrzeń nazw XAML (x:) Funkcje językowe (Silverlight).