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
.NET Desktop feedback