Delen via


x:Name Directive

Unieke identificatie van door XAML gedefinieerde elementen in een XAML-naamscoop. XAML-naamscopen en hun uniekheidsmodellen kunnen worden toegepast op de geïnstantieerde objecten wanneer frameworks API's bieden of gedrag implementeren dat toegang heeft tot de XAML-objectgrafiek tijdens runtime.

XAML-kenmerkgebruik

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

XAML-waarden

Waarde Beschrijving
XAMLNameValue Een tekenreeks die voldoet aan de beperkingen van de XamlName Grammar.

Opmerkingen

Nadat x:Name is toegepast op het backingprogrammeringsmodel van een framework, is de naam gelijk aan de variabele die een objectverwijzing of een exemplaar bevat, zoals geretourneerd door een constructor.

De waarde van een x:Name-instructiegebruik moet uniek zijn binnen een XAML-naamscoop. Wanneer de .NET XAML Services-API standaard wordt gebruikt, wordt de primaire XAML-naamscoop gedefinieerd in het hoofdelement XAML van één XAML-productie en omvat de elementen die zijn opgenomen in die XAML-productie. Aanvullende discrete XAML-naamscopen die zich in één XAML-productie kunnen voordoen, kunnen worden gedefinieerd door frameworks om specifieke scenario's aan te pakken. In WPF worden bijvoorbeeld nieuwe XAML-naamscopen gedefinieerd en gemaakt door een sjabloon die ook is gedefinieerd voor die XAML-productie. Zie WPF XAML Namescopesvoor meer informatie over XAML-naamscopen (geschreven voor WPF maar relevant voor veel XAML-naamscopen).

Over het algemeen mag x:Name niet worden toegepast in situaties waarin ook x:Keywordt gebruikt. XAML-implementaties door specifieke bestaande frameworks hebben vervangingsconcepten geïntroduceerd tussen x:Key en x:Name, maar dat is geen aanbevolen praktijk. .NET XAML Services biedt geen ondersteuning voor dergelijke vervangingsconcepten bij het verwerken van naam-/sleutelgegevens, zoals INameScope of DictionaryKeyPropertyAttribute.

Regels voor het toestaan van x:Name en de afdwinging van naam-uniekheid worden mogelijk gedefinieerd door specifieke implementatieframeworks. Voor gebruik met .NET XAML Services moeten de frameworkdefinities van de uniekheid van XAML-naamscopen echter consistent zijn met de definitie van INameScope informatie in deze documentatie en moeten dezelfde regels worden gebruikt met betrekking tot waar de informatie wordt toegepast. De implementatie van Windows Presentation Foundation (WPF) verdeelt bijvoorbeeld verschillende markeringselementen in afzonderlijke NameScope bereiken, zoals resourcewoordenlijsten, de logische structuur die is gemaakt door de XAML op paginaniveau, sjablonen en andere uitgestelde inhoud, en dwingt vervolgens de uniekheid van XAML-namen af binnen elk van deze XAML-naamscopen.

Voor aangepaste typen die gebruikmaken van .NET XAML Services XAML-objectschrijvers, kan een eigenschap die aan x:Name van een type wordt toegewezen, tot stand worden gebracht of gewijzigd. U definieert dit gedrag door te verwijzen naar de naam van de eigenschap die moet worden toegewezen met de RuntimeNamePropertyAttribute in de typedefinitiecode. RuntimeNamePropertyAttribute is een kenmerk op typeniveau.

Using.NET XAML Services kan de ondersteuningslogica voor XAML-naambereiken op een frameworkneutrale manier worden gedefinieerd door de INameScope interface te implementeren.

Opmerkingen bij WPF-gebruik

Onder de standaard buildconfiguratie voor een WPF-toepassing die gebruikmaakt van XAML, gedeeltelijke klassen en code-behind, wordt de opgegeven x:Name de naam van een veld dat wordt gemaakt in de onderliggende code wanneer XAML wordt verwerkt door een compilatietaak voor markeringen en dat veld bevat een verwijzing naar het object. Standaard is het gemaakte veld intern. U kunt veldtoegang wijzigen door het kenmerk x:FieldModifier-kenmerk op te geven. In WPF en Silverlight is de reeks dat de opmaakcompilatie het veld in een gedeeltelijke klasse definieert en een naam geeft, maar de waarde in eerste instantie leeg is. Vervolgens wordt een gegenereerde methode met de naam InitializeComponent aangeroepen vanuit de klasseconstructor. InitializeComponent bestaat uit FindName aanroepen met behulp van elk van de x:Name waarden die bestaan in het door XAML gedefinieerde deel van de gedeeltelijke klasse als invoertekenreeksen. De retourwaarden worden vervolgens toegewezen aan de verwijzing naar een vergelijkbaar veld om de veldwaarden te vullen met objecten die zijn gemaakt op basis van XAML-parsering. De uitvoering van InitializeComponent het mogelijk maken om rechtstreeks naar de objectgrafiek van de runtime te verwijzen met behulp van de x:Name/veldnaam, in plaats van FindName expliciet aan te roepen wanneer u een verwijzing naar een XAML-gedefinieerd object nodig hebt.

Voor een WPF-toepassing die gebruikmaakt van de Microsoft Visual Basic-doelen en XAML-bestanden bevat met Page buildactie, wordt er een afzonderlijke verwijzingseigenschap gemaakt tijdens de compilatie waarmee het WithEvents trefwoord wordt toegevoegd aan alle elementen die een x:Namehebben, ter ondersteuning van Handles syntaxis voor gedelegeerden van gebeurtenishandlers. Deze eigenschap is altijd openbaar. Zie Visual Basic en WPF Event Handlingvoor meer informatie.

x:Name wordt gebruikt door de WPF XAML-processor voor het registreren van een naam in een XAML-naamscoop tijdens de laadtijd, zelfs voor gevallen waarin de pagina niet is gecompileerd door buildacties (bijvoorbeeld losse XAML van een resourcewoordenlijst). Een van de redenen voor dit gedrag is dat de x:Name mogelijk nodig is voor ElementName binding. Zie Overzicht van gegevensbindingenvoor meer informatie.

Zoals eerder vermeld, mag x:Name (of Name) niet worden toegepast in situaties waarin ook x:Keywordt gebruikt. De WPF-ResourceDictionary heeft een speciaal gedrag om zichzelf te definiëren als een XAML-naamscoop, maar retourneert geen geïmplementeerde of null-waarden voor INameScope API's als een manier om dit gedrag af te dwingen. Als de WPF XAML-parser Name of x:Name in een door XAML gedefinieerde ResourceDictionarytegenkomt, wordt de naam niet toegevoegd aan een XAML-naamscoop. Als u die naam probeert te vinden vanuit een XAML-naamscoop en de FindName methoden, worden er geen geldige resultaten geretourneerd.

x:Naam en naam

Veel WPF-toepassingsscenario's kunnen elk gebruik van het kenmerk x:Name vermijden, omdat de Name afhankelijkheidseigenschap zoals opgegeven in de standaard XAML-naamruimte voor verschillende belangrijke basisklassen, zoals FrameworkElement en FrameworkContentElement aan hetzelfde doel voldoet. Er zijn nog steeds enkele veelvoorkomende XAML- en WPF-scenario's waarbij codetoegang tot een element zonder Name eigenschap op frameworkniveau belangrijk is. Bepaalde animatie- en storyboard-ondersteuningsklassen ondersteunen bijvoorbeeld geen Name eigenschap, maar ze moeten vaak in code worden verwezen om de animatie te beheren. U moet x:Name opgeven als een kenmerk op tijdlijnen en transformaties die zijn gemaakt in XAML, als u deze later vanuit code wilt raadplegen.

Als Name beschikbaar is als eigenschap in de klasse, kunnen Name en x:Name door elkaar worden gebruikt als kenmerken, maar een parseringsuitzondering resulteert als beide op hetzelfde element zijn opgegeven. Als de XAML is gecompileerd, treedt de uitzondering op bij het compileren van markeringen, anders gebeurt het bij het laden.

Name kan worden ingesteld met behulp van de syntaxis van het XAML-kenmerk en in code met behulp van SetValue; Houd er echter rekening mee dat het instellen van de eigenschap Name in code geen representatieve veldreferentie maakt binnen de XAML-naamscoop in de meeste gevallen waarin de XAML al is geladen. In plaats van Name in code in te stellen, gebruikt u NameScope methoden uit code op basis van de juiste naamscoop.

Name kan ook worden ingesteld met behulp van de syntaxis van het eigenschapselement met binnenste tekst, maar dat is ongebruikelijk. Daarentegen kan x:Name niet worden ingesteld in de syntaxis van het XAML-eigenschapselement of in code met behulp van SetValue; het kan alleen worden ingesteld met behulp van kenmerksyntaxis voor objecten omdat het een richtlijn is.

Silverlight-gebruiksnotities

x:Name voor Silverlight wordt afzonderlijk gedocumenteerd. Zie XAML-naamruimte (x:) Language Features (Silverlight)voor meer informatie.

Zie ook