Dela via


x:Nyckeldirektiv

Identifierar element som skapas och refereras till unikt i en XAML-definierad ordlista. Att lägga till ett x:Key-värde i ett XAML-objektelement är det vanligaste sättet att identifiera en resurs i en resursordlista, till exempel i en WPF-ResourceDictionary.

XAML-attributanvändning

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

XAML-attributanvändning (WPF-specifik)

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

XAML-värden

Värde Beskrivning
stringKeyValue En textsträng som ska användas som en nyckel. Textsträngen måste överensstämma med XamlName Grammar.
markupExtensionUsage Inom avgränsarna för markeringstillägget {}, en markeringstilläggsanvändning som tillhandahåller ett objekt som ska användas som en nyckel. Se Kommentarer.

Anmärkningar

x:Key stöder begreppet XAML-resursordlista. XAML som språk definierar inte en resursordlisteimplementering, som lämnas till specifika gränssnittsramverk. Mer information om hur XAML-resursordlistor implementeras i WPF finns i Översikt över XAML-resurser (WPF .NET).

I XAML 2006 och WPF måste x:Key anges som ett attribut. Du kan fortfarande använda icke-strängnycklar, men detta kräver en markeringstilläggsanvändning för att kunna ange värdet för icke-strängen i attributformuläret. Om du använder XAML 2009 kan x:Key anges som ett element för att uttryckligen stödja ordlistor som är nyckelade efter andra objekttyper än strängar utan att det krävs ett mellanliggande tillägg för markup. Se avsnittet "XAML 2009" i det här avsnittet. Resten av avsnittet Anmärkningar gäller specifikt för XAML 2006-implementeringen.

Attributvärdet för x:Key kan vara valfri sträng som definieras i XamlName Grammar eller vara ett objekt som utvärderas via ett tillägg för markering. Se "WPF Usage Notes" för ett exempel från WPF.

Underordnade element i ett överordnat element som är en IDictionary implementering måste vanligtvis innehålla ett x:Key-attribut som anger ett unikt nyckelvärde i ordlistan. Ramverk kan implementera aliasnyckelegenskaper som ersättning för x:Key för vissa typer. typer som definierar sådana egenskaper ska hänföras till DictionaryKeyPropertyAttribute.

Kodens motsvarighet till att ange x:Key är nyckeln som används för den underliggande IDictionary. Till exempel motsvarar en x:Key som används i markering för en resurs i WPF värdet för parametern key för ResourceDictionary.Add när du lägger till resursen i en WPF-ResourceDictionary i kod.

WPF-användningsanteckningar

Underordnade objekt i ett överordnat objekt som är en IDictionary implementering, till exempel WPF-ResourceDictionary, måste vanligtvis innehålla ett x:Key-attribut och nyckelvärdet måste vara unikt i ordlistan. Det finns två viktiga undantag:

I den övergripande WPF XAML-implementerings- och programmodellen kontrolleras inte nyckel unikhet av XAML-markeringskompilatorn. I stället orsakar saknade eller icke-anpassade x:Key värden XAML-parsningsfel för belastningstid. Visual Studio-hantering av ordlistor för WPF kan dock ofta notera sådana fel i designfasen.

Observera att i syntaxen som visas är ResourceDictionary-objektet implicit i hur WPF XAML-processorn skapar en samling för att fylla i en Resources samling. En ResourceDictionary anges vanligtvis inte uttryckligen som ett element i markering, även om det i vissa fall kan vara om det behövs för tydlighetens skull (det skulle vara ett samlingsobjektelement mellan Resources egenskapselementet och objekten i ordlistan). Information om varför ett samlingsobjekt nästan alltid är ett implicit element i markering finns i XAML-syntax i detalj.

I WPF XAML-implementeringen definieras hanteringen av resursordlistenycklar av den ResourceKey abstrakta klassen. WPF XAML-processorn genererar dock olika underliggande tilläggstyper för nycklar baserat på deras användning. Till exempel hanteras nyckeln för en DataTemplate eller en härledd klass separat och skapar ett distinkt DataTemplateKey objekt.

Nycklar och namn använder olika direktiv och språkelement (x:Key jämfört med x:Name) i den grundläggande XAML-definitionen. Nycklar och namn används också i olika situationer av WPF-definitionen och tillämpningen av dessa begrepp. Mer information finns i WPF XAML Namescopes.

Som tidigare nämnts kan värdet för en nyckel anges via ett markeringstillägg och kan vara annat än ett strängvärde. Ett exempel på WPF-scenario är att värdet för x:Key kan vara en ComponentResourceKey-. Vissa kontroller exponerar en formatnyckel av den typen för en anpassad formatresurs som påverkar en del av kontrollens utseende och beteende utan att helt ersätta formatet. Ett exempel på en sådan nyckel är ButtonStyleKey.

Den sammanslagna ordlistefunktionen i WPF introducerar ytterligare överväganden för nyckel unikhet och nyckelsökningsbeteende. Mer information finns i sammanfogade resursordlistor.

XAML 2009

XAML 2009 minskar begränsningen som x:Key alltid anges i attributformulär.

I WPF kan du använda XAML 2009-funktioner, men bara för XAML som inte är påläggskompilerad. Påläggskompilerade XAML för WPF och BAML-formen av XAML stöder för närvarande inte XAML 2009-nyckelord och -funktioner.

Under XAML 2009 kan du ange x:Key element via följande användning:

XAML-elementanvändning (endast XAML 2009)

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

XAML-värden

Värde Beskrivning
keyObject Objektelement för objektet som används som nyckel för en viss object i en särskild ordlista.
  • Containern/överordnad för den här typen av användning visas inte här. object förväntas vara underordnat ett objektelement som representerar en specialiserad ordlisteimplementering. keyObject förväntas vara en objektinstans (eller ett värde av en värdetyp) som är lämplig som nyckel för den specifika specialiserade ordlisteimplementeringen.

  • WPF implementerar inte ordlistor som kräver den här användningen. Objektnycklar är mer en allmän funktion i XAML-språket, vilket kan vara användbart för vissa anpassade ordlistescenarier där det är önskvärt att skapa ordlistan i XAML. För WPF-funktioner, till exempel implicita format som använder icke-strängnycklar för resurser, finns det andra metoder för att upprätta eller ange nycklarna, så det är inte nödvändigt att använda en objektnyckel.

  • keyObject kan också vara en markeringstilläggsanvändning i objektelementform i stället för en direkt objektinstans.

Användningsanteckningar för Silverlight

x:Key för Silverlight dokumenteras separat. Mer information finns i XAML-namnområde (x:) Language Features (Silverlight).

Se även