x:Key — dyrektywa

Unikatowo identyfikuje elementy, które są tworzone i przywołytywowane w słowniku zdefiniowanym przez XAML. Dodawanie wartości do elementu obiektu XAML jest najbardziej powszechnym sposobem identyfikowania zasobu w słowniku zasobów, na przykład x:Key w WPF ResourceDictionary .

Użycie atrybutu języka XAML

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

Użycie atrybutu 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 ogranicznikach rozszerzenia znaczników jest to 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 dla określonych platform interfejsu użytkownika. Aby dowiedzieć się więcej na temat sposobu implementować słowniki zasobów XAML w WPF, zobacz Overview of XAML resources (WPF .NET) (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 zapewnienia wartości niepociągowej w postaci atrybutu. Jeśli używasz języka XAML 2009, element można określić jako element , aby jawnie obsługiwać słowniki z kluczami według typów obiektów innych niż ciągi bez konieczności pośrednich rozszerzeń x:Key znaczników. Zobacz sekcję "XAML 2009" w tym temacie. Pozostała część sekcji Uwagi dotyczy konkretnie implementacji xaml 2006.

Wartość atrybutu może być dowolnym ciągiem zdefiniowanym w gramatyce XamlName lub może być obiektem obliczany x:Key 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 implementacją, zwykle muszą zawierać atrybut, który określa unikatową wartość klucza IDictionary x:Key w tym słowniku. Struktury mogą implementować aliasowane właściwości klucza do zastąpienia dla określonych typów; typy definiujące takie właściwości x:Key należy przypisać za pomocą DictionaryKeyPropertyAttribute .

Kod odpowiadający określeniu x:Key jest kluczem używanym dla bazowego . IDictionary Na przykład element , który jest stosowany w znacznikach dla zasobu w WPF, jest odpowiednikiem wartości parametru podczas dodawania zasobu do WPF w x:Key key ResourceDictionary.Add ResourceDictionary kodzie.

Uwagi dotyczące użycia WPF

Obiekty podrzędne obiektu nadrzędnego, który jest implementacją, takie jak WPF, zwykle muszą zawierać atrybut , a wartość klucza musi być unikatowa w tym IDictionary ResourceDictionary x:Key słowniku. Istnieją dwa wyjątki:

  • Niektóre typy WPF deklarują niejawny klucz do użycia w słowniku. Na przykład , z , lub z , może być w Style TargetType i użyj DataTemplate DataType ResourceDictionary niejawnego klucza.

  • WPF obsługuje koncepcję słownika scalonych 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 FindResource pomocą . Aby uzyskać więcej informacji, zobacz Scalone słowniki zasobów.

W ogólnej implementacji kodu XAML WPF i modelu aplikacji unikatowość klucza nie jest sprawdzana przez kompilator znaczników XAML. Zamiast tego brakujące lub nienadowe x:Key wartości powodują błędy parsera XAML czasu ładowania. Jednak obsługa Visual Studio dla WPF często może zauważyć takie błędy w fazie projektowania.

Należy zauważyć, że w przedstawionej składni obiekt jest niejawny w sposobu, w jaki procesor XAML WPF tworzy kolekcję w celu ResourceDictionary wypełnienia Resources kolekcji. Obiekt nie jest zwykle dostarczany jawnie jako element w znacznikach, chociaż w niektórych przypadkach może być używany w celu zwiększenia przejrzystości (byłby to element obiektu kolekcji między elementem właściwości a elementami w tym ResourceDictionary Resources słowniku). Aby uzyskać informacje o tym, dlaczego obiekt kolekcji jest prawie zawsze niejawnym elementem znaczników, zobacz Szczegóły składni JĘZYKA XAML.

W implementacji WPF XAML obsługa kluczy słownika zasobów jest definiowana przez ResourceKey klasę abstrakcyjną. Jednak procesor XAML WPF generuje różne podstawowe typy rozszerzeń dla kluczy na podstawie ich użycia. Na przykład klucz klasy lub dowolnej klasy pochodnej jest obsługiwany oddzielnie DataTemplate i tworzy odrębny DataTemplateKey obiekt.

Klucze i nazwy używają różnych dyrektyw i elementów języka ( x:Key w porównaniu z ) w podstawowej definicji x:Name 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 WPF XAML).

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 taki, że wartość elementu może x:Key być wartością ComponentResourceKey. Niektóre kontrolki uwidoczniają klucz stylu tego typu dla zasobu stylu niestandardowego, który ma wpływ na część wyglądu i zachowania tej kontrolki bez całkowitego zastępowania stylu. Przykładem takiego klucza jest ButtonStyleKey .

Funkcja słownika scalonych WPF wprowadza dodatkowe zagadnienia dotyczące unikatowości klucza i zachowania wyszukiwania kluczy. Aby uzyskać więcej informacji, zobacz Scalone słowniki zasobów.

XAML 2009

XAML 2009 złagodnia ograniczenie, które x:Key zawsze należy podano w postaci atrybutu.

W WPF można używać funkcji XAML 2009, ale tylko dla języka XAML, który nie jest kompilowany na podstawie znaczników. Skompilowany na podstawie znaczników kod XAML dla WPF i forma 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ć x:Key elementy 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. object Obiekt powinien być elementem podrzędnym elementu obiektu, który reprezentuje wyspecjalizowaną implementację słownika. keyObject Oczekuje 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łownika, w których pożądane jest utworzenie słownika w języku XAML. W przypadku funkcji WPF, takich jak style niejawne, 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.

  • keyObject Moż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).

Zobacz też