Dela via


x:Name Directive

Identifierar unikt XAML-definierade element i ett XAML-namnskop. XAML-namnskop och deras unika modeller kan tillämpas på instansierade objekt, när ramverk tillhandahåller API:er eller implementerar beteenden som har åtkomst till XAML-skapade objektdiagram vid körning.

XAML-attributanvändning

<object x:Name="XAMLNameValue".../>

XAML-värden

Värde Beskrivning
XAMLNameValue En sträng som följer begränsningarna för XamlName Grammar.

Anmärkningar

När x:Name har tillämpats på ett ramverks programmeringsmodell för säkerhetskopiering motsvarar namnet variabeln som innehåller en objektreferens eller en instans som returneras av en konstruktor.

Värdet för en x:Name direktivanvändning måste vara unikt inom ett XAML-namnskop. Som standard när det används av .NET XAML Services API definieras det primära XAML-namnskopet i XAML-rotelementet i en enda XAML-produktion och omfattar de element som finns i XAML-produktionen. Ytterligare diskreta XAML-namnskop som kan inträffa inom en enda XAML-produktion kan definieras av ramverk för att hantera specifika scenarier. I WPF definieras till exempel nya XAML-namnskop och skapas av alla mallar som också definieras i den XAML-produktionen. Mer information om XAML-namnskop (skrivet för WPF men relevant för många XAML-namnscopebegrepp) finns i WPF XAML Namescopes.

I allmänhet bör x:Name inte tillämpas i situationer som också använder x:Key. XAML-implementeringar av specifika befintliga ramverk har introducerat ersättningsbegrepp mellan x:Key och x:Name, men det är inte en rekommenderad metod. .NET XAML Services stöder inte sådana ersättningsbegrepp vid hantering av namn/nyckelinformation, till exempel INameScope eller DictionaryKeyPropertyAttribute.

Regler för tillåtna x:Name samt framtvingande av namn unikhet kan definieras av specifika implementeringsramverk. För att kunna användas med .NET XAML-tjänster bör dock ramverksdefinitionerna för XAML-namnskopets unikhet vara förenliga med definitionen av INameScope information i den här dokumentationen och bör använda samma regler för var informationen tillämpas. Implementeringen av Windows Presentation Foundation (WPF) delar till exempel upp olika markeringselement i separata NameScope intervall, till exempel resursordlistor, det logiska träd som skapats av XAML på sidnivå, mallar och annat uppskjutet innehåll och framtvingar sedan XAML-namns unikhet inom vart och ett av dessa XAML-namnscopes.

För anpassade typer som använder .NET XAML Services XAML-objektskrivare kan en egenskap som mappar till x:Name på en typ upprättas eller ändras. Du definierar det här beteendet genom att referera till namnet på egenskapen som ska mappas med RuntimeNamePropertyAttribute i typdefinitionskoden. RuntimeNamePropertyAttribute är ett attribut på typnivå.

Using.NET XAML Services kan stödlogik för XAML-namnscopestöd definieras på ett ramverksneutralt sätt genom att implementera INameScope-gränssnittet.

WPF-användningsanteckningar

Under standardkonfigurationen för ett WPF-program som använder XAML, partiella klasser och kod bakom blir den angivna x:Name namnet på ett fält som skapas i den underliggande koden när XAML bearbetas av en kompileringskompileringsuppgift för markering och fältet innehåller en referens till objektet. Som standard är det skapade fältet internt. Du kan ändra fältåtkomst genom att ange attributet x:FieldModifier. I WPF och Silverlight är sekvensen att markeringskompileringen definierar och namnger fältet i en partiell klass, men värdet är ursprungligen tomt. Sedan anropas en genererad metod med namnet InitializeComponent inifrån klasskonstruktorn. InitializeComponent består av FindName-anrop med var och en av de x:Name värden som finns i den XAML-definierade delen av den partiella klassen som indatasträngar. Returvärdena tilldelas sedan till fältreferensen med samma namn för att fylla fältvärdena med objekt som skapades från XAML-parsning. Körningen av InitializeComponent göra det möjligt att referera till diagrammet körningstidsobjekt med hjälp av x:Name/fältnamnet direkt, i stället för att behöva anropa FindName explicit när du behöver en referens till ett XAML-definierat objekt.

För ett WPF-program som använder Microsoft Visual Basic-målen och innehåller XAML-filer med Page build-åtgärd skapas en separat referensegenskap under kompilering som lägger till nyckelordet WithEvents till alla element som har en x:Name, för att stödja Handles syntax för händelsehanterardelegater. Den här egenskapen är alltid offentlig. Mer information finns i Visual Basic- och WPF-händelsehantering.

x:Name används av WPF XAML-processorn för att registrera ett namn i ett XAML-namnskop vid belastningstillfället, även om sidan inte kompileras av byggåtgärder (till exempel lös XAML i en resursordlista). En orsak till det här beteendet är att x:Name kan behövas för ElementName bindning. Mer information finns i Översikt över databindning.

Som tidigare nämnts bör x:Name (eller Name) inte tillämpas i situationer som också använder x:Key. WPF-ResourceDictionary har ett särskilt beteende att definiera sig själv som ett XAML-namnskop men returnerar Inte implementerade eller null-värden för INameScope API:er som ett sätt att framtvinga det här beteendet. Om WPF XAML-parsern påträffar Name eller x:Name i en XAML-definierad ResourceDictionaryläggs inte namnet till i något XAML-namnskop. Försök att hitta det namnet från något XAML-namnskop och FindName-metoderna returnerar inte giltiga resultat.

x:Namn och namn

Många WPF-programscenarier kan undvika all användning av attributet x:Name eftersom Name beroendeegenskap som anges i XAML-standardnamnområdet för flera av de viktiga basklasserna, till exempel FrameworkElement och FrameworkContentElement uppfyller samma syfte. Det finns fortfarande några vanliga XAML- och WPF-scenarier där kodåtkomst till ett element utan Name egenskap på ramverksnivå är viktigt. Vissa stödklasser för animering och storyboard stöder till exempel inte en Name egenskap, men de måste ofta refereras i kod för att kunna styra animeringen. Du bör ange x:Name som ett attribut på tidslinjer och transformeringar som skapas i XAML, om du tänker referera till dem från koden senare.

Om Name är tillgängligt som en egenskap i klassen kan Name och x:Name användas omväxlande som attribut, men ett parsa-undantag resulterar om båda anges i samma element. Om XAML-markering kompileras sker undantaget på markeringskompileringen, annars sker det vid belastning.

Name kan anges med XAML-attributsyntax och i kod med hjälp av SetValue; Observera dock att inställningen av egenskapen Name i kod inte skapar referensen för representativt fält i XAML-namnskopet i de flesta fall där XAML redan har lästs in. I stället för att försöka ange Name i kod använder du NameScope metoder från kod mot lämpligt namnskop.

Name kan också anges med egenskapselementsyntax med inre text, men det är ovanligt. Däremot kan x:Name inte anges i syntaxen för XAML-egenskapselement eller i kod med hjälp av SetValue; Det kan bara anges med hjälp av attributsyntax för objekt eftersom det är ett direktiv.

Användningsanteckningar för Silverlight

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

Se även