Dela via


x:Name-attribut

Identifierar objektelement unikt för åtkomst till det instansierade objektet från bakomliggande kod eller generell kod. När x:Name har tillämpats på en underliggande programmeringsmodell kan det betraktas som likvärdigt med en variabel som innehåller en objektreferens, som returneras av en konstruktor.

XAML-attributanvändning

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

XAML-värden

Begrepp Description
XAMLNameValue En sträng som överensstämmer med begränsningarna för XamlName-grammatiken.

XamlName-grammatik

Följande är den normativa grammatiken för en sträng som används som en nyckel i den här XAML-implementeringen:

XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
  • Tecken är begränsade till det nedre ASCII-intervallet, och mer specifikt till romerska alfabet med versaler och gemener, siffror och understreck (_).
  • Unicode-teckenintervallet stöds inte.
  • Ett namn kan inte börja med en siffra. Vissa verktygsimplementeringar lägger till ett inledande understreck (_) till en sträng om användaren använder en siffra som det inledande tecknet, eller om verktyget autogenererar x:Name-värden, baserat på andra värden som innehåller siffror.

Anmärkningar

Det angivna x:Name blir namnet på ett fält som skapas i den underliggande koden när XAML bearbetas och fältet innehåller en referens till objektet. Processen för att skapa det här fältet utförs av MSBuild-målstegen, som också ansvarar för att ansluta de partiella klasserna för en XAML-fil och dess kod bakom. Det här beteendet är inte nödvändigtvis specificerat av XAML-språket; det är den specifika implementeringen som UWP-programmering (Universal Windows Platform) för XAML använder för att tillämpa x:Name i sina programmerings- och applikationsmodeller.

Varje definierat x:Name måste vara unikt inom ett XAML-namnskop. I allmänhet definieras ett XAML-namnskop på rotelementnivån på en inläst sida och innehåller alla element under elementet på en enda XAML-sida. Ytterligare XAML-namnskop definieras av alla kontrollmallar eller datamallar som definieras på den sidan. Under körning skapas ett annat XAML-namnskop för roten av objektträdet som skapas från en tillämpad kontrollmall och även av objektträd som skapas genom ett anrop till XamlReader.Load. Mer information finns i XAML-namnskop.

Designverktyg skapar ofta x:Name-värden automatiskt för element när de introduceras på designytan. Autogenereringsschemat varierar beroende på vilken designer du använder, men ett vanligt schema är att generera en sträng som börjar med klassnamnet som backar elementet, följt av ett avancerande heltal. Om du till exempel introducerar det första knappelementet i designern kan du se att det här elementet i XAML har attributet x:Name för "Button1".

x:Namn kan inte anges i syntaxen för XAML-egenskapselementet eller i kod med SetValue. x:Namn kan bara anges med XAML-attributsyntax för element.

Anmärkning

Specifikt för C++/CX-appar skapas inte ett bakgrundsfält för en x:Name-referens för rotelementet i en XAML-fil eller -sida. Om du behöver referera till rotobjektet från C++ code-behind använder du andra API:er eller trädbläddering. Du kan till exempel anropa FindName för ett känt underordnat element och sedan anropa Överordnad.

x:Namn och andra namnegenskaper

Vissa typer som används i XAML har också en egenskap med namnet Namn. Till exempel FrameworkElement.Name och TextElement.Name.

Om Namn är tillgängligt som en inställningsbar egenskap för ett element kan Namn och x:Namn användas omväxlande i XAML, men ett fel uppstår om båda attributen anges i samma element. Det finns också fall där det finns en namnegenskap men den är skrivskyddad (till exempel VisualState.Name). Om så är fallet använder du alltid x:Name för att namnge elementet i XAML och det skrivskyddade namnet finns för något mindre vanligt kodscenario.

ObserveraFrameworkElement.Name vanligtvis inte bör användas som ett sätt att ändra värden som ursprungligen angavs av x:Name, även om det finns vissa scenarier som är undantag från den allmänna regeln. I vanliga scenarier är skapandet och definitionen av XAML-namnskop en XAML-processoråtgärd. Om du ändrar FrameworkElement.Name vid körning kan det resultera i en inkonsekvent namnjustering för XAML-namn/privata fält, vilket är svårt att hålla reda på i koden bakom.

x:Name och x:Key

x:Name kan användas som ett attribut för element i en ResourceDictionary för att fungera som ersättning för attributet x:Key. (Det är en regel att alla element i en ResourceDictionary måste ha attributet x:Key eller x:Name.) Detta är vanligt för Storyboarded-animeringar. Mer information finns i avsnittet resourcedictionary- och XAML-resursreferenser.