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:
Vissa WPF-typer deklarerar en implicit nyckel för ordlisteanvändning. Till exempel kan en Style med en TargetType, eller en DataTemplate med en DataType, finnas i en ResourceDictionary och använda den implicita nyckeln.
WPF stöder ett sammanslaget resursordlistekoncept. Nycklar kan delas mellan de sammanfogade ordlistorna och beteendet för delad nyckel kan nås med hjälp av FindResource. Mer information finns i sammanfogade resursordlistor.
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
.NET Desktop feedback