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:Key
wordt 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:Name
hebben, 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:Key
wordt 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
.NET Desktop feedback