Sdílet prostřednictvím


x:Name – direktiva

Jedinečně identifikuje elementy definované XAML v názvovém oboru XAML. Názvové rozsahy XAML a jejich modely jedinečnosti se dají použít u vytvořených objektů, když architektury poskytují rozhraní API nebo implementují chování, které přistupují k grafu objektů vytvořenému xaml za běhu.

Použití atributu XAML

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

Hodnoty XAML

Hodnota Popis
XAMLNameValue Řetězec, který odpovídá omezením XamlName Grammar.

Poznámky

Po použití x:Name na programovací model architektury je název ekvivalentní proměnné, která obsahuje odkaz na objekt nebo instanci vrácenou konstruktorem.

Hodnota použití direktivy x:Name musí být jedinečná v rámci oboru názvů XAML. Ve výchozím nastavení při použití rozhraní .NET XAML Services API je primární názvový rozsah XAML definován v kořenovém elementu XAML jednoho produkčního prostředí XAML a zahrnuje prvky obsažené v tomto produkčním prostředí XAML. Další diskrétní názvové obory XAML, ke kterým může dojít v rámci jednoho produkčního prostředí XAML, je možné definovat architekturami pro řešení konkrétních scénářů. Například ve WPF jsou definovány a vytvořeny nové názvové skopy XAML každou šablonou, která je také definována v tomto produkčním prostředí XAML. Další informace o názvových rozsacích XAML (napsaných pro WPF, ale relevantní pro mnoho konceptů názvových oborů XAML) najdete v tématu WPF XAML Namescopes.

Obecně platí, že x:Name by neměly být použity v situacích, které také používají x:Key. Implementace XAML podle konkrétních existujících architektur zavedly koncepty nahrazení mezi x:Key a x:Name, ale to není doporučený postup. Služby .NET XAML nepodporují takové koncepty nahrazení při zpracování informací o názvu a klíči, jako jsou INameScope nebo DictionaryKeyPropertyAttribute.

Pravidla pro povolení x:Name a vynucení jedinečnosti názvů jsou potenciálně definována konkrétními implementovými architekturami. Aby bylo možné je použít se službami .NET XAML Services, měly by být definice architektury jedinečnosti názvového oboru XAML konzistentní s definicí INameScope informací v této dokumentaci a měly by používat stejná pravidla týkající se místa použití informací. Například implementace WPF (Windows Presentation Foundation) rozdělí různé prvky značek do samostatných NameScope rozsahů, jako jsou slovníky prostředků, logický strom vytvořený xaml na úrovni stránky, šablony a další odložený obsah a potom vynucuje jedinečnost názvu XAML v rámci každého z těchto oborů názvů XAML.

Pro vlastní typy, které používají zapisovače objektů XAML služby .NET XAML, lze vytvořit nebo změnit vlastnost, která se mapuje na x:Name typu. Toto chování definujete odkazem na název vlastnosti, která se má mapovat s RuntimeNamePropertyAttribute v kódu definice typu. RuntimeNamePropertyAttribute je atribut na úrovni typu.

Using.NET služby XAML lze backingovou logiku podpory názvového rozsahu XAML definovat v rámci neutrálním způsobem implementací rozhraní INameScope.

Poznámky k využití WPF

V rámci standardní konfigurace sestavení pro aplikaci WPF, která používá XAML, částečné třídy a kód za kódem, se zadaná x:Name stane názvem pole vytvořeného v podkladovém kódu při zpracování XAML úlohou sestavení kompilace značek a toto pole obsahuje odkaz na objekt. Ve výchozím nastavení je vytvořené pole interní. Přístup k poli můžete změnit zadáním atributu x:FieldModifier. Ve WPF a Silverlight je sekvence, že kód kompilace definuje a pojmenuje pole v částečné třídě, ale hodnota je zpočátku prázdná. Pak je vygenerovaná metoda s názvem InitializeComponent volána z konstruktoru třídy. InitializeComponent se skládá z volání FindName pomocí každé z hodnot x:Name, které existují v části definované XAML částečné třídy jako vstupní řetězce. Návratové hodnoty se pak přiřadí k odkazu na pole s tímto názvem, aby se hodnoty polí vyplnily objekty, které byly vytvořeny z analýzy XAML. Provádění InitializeComponent umožňuje odkazovat na graf objektu doby běhu pomocí názvu x:Name / pole přímo, a nemusíte volat FindName explicitně kdykoli potřebujete odkaz na objekt definovaný XAML.

Pro aplikaci WPF, která používá cíle jazyka Microsoft Visual Basic a obsahuje soubory XAML s Page akci sestavení, se během kompilace vytvoří samostatná referenční vlastnost, která přidá klíčové slovo WithEvents ke všem prvkům, které mají x:Name, pro podporu Handles syntaxe pro delegáty obslužné rutiny událostí. Tato vlastnost je vždy veřejná. Další informace naleznete v tématu Visual Basic a WPF Event Handling.

x:Name používá procesor WPF XAML k registraci názvu do názvového oboru XAML v době načtení, a to i v případech, kdy stránka není zkompilována akcemi sestavení (například volný KÓD XAML slovníku prostředků). Jedním z důvodů tohoto chování je to, že x:Name je potenciálně potřeba pro ElementName vazby. Podrobnosti najdete vpřehledu datových vazeb .

Jak už bylo zmíněno dříve, x:Name (nebo Name) by se neměly používat v situacích, které také používají x:Key. WPF ResourceDictionary má speciální chování, které se definuje jako názvový rozsah XAML, ale vrací neimplementované nebo null hodnoty pro INameScope API jako způsob, jak toto chování vynutit. Pokud analyzátor WPF XAML narazí Name nebo x:Name v ResourceDictionarydefinovaném XAML , název se nepřidá do žádného názvového oboru XAML. Pokus o nalezení názvu z libovolného názvového oboru XAML a metody FindName nevrací platné výsledky.

x:Name and Name

Mnoho scénářů aplikace WPF se může vyhnout použití atributu x:Name, protože vlastnost Name závislostí zadaná ve výchozím oboru názvů XAML pro několik důležitých základních tříd, jako jsou FrameworkElement a FrameworkContentElement splňuje tento stejný účel. Stále existují některé běžné scénáře XAML a WPF, kdy je důležitý přístup kódu k prvku bez Name vlastnosti na úrovni architektury. Například určité třídy animace a scénáře nepodporují Name vlastnost, ale často je třeba odkazovat v kódu, aby bylo možné ovládat animaci. Pokud chcete odkazovat z kódu později, měli byste zadat x:Name jako atribut na časové ose a transformace vytvořené v jazyce XAML.

Pokud je Name k dispozici jako vlastnost třídy, Name a x:Name lze použít zaměnitelně jako atributy, ale parse výjimka bude mít za následek, pokud jsou oba zadány ve stejném prvku. Pokud je XAML zkompilován, dojde k výjimce u kompilace značek, jinak dojde k načtení.

Name lze nastavit pomocí syntaxe atributu XAML a v kódu pomocí SetValue; Všimněte si však, že nastavení vlastnosti Name v kódu nevytvoří odkaz na reprezentativní pole v názvovém oboru XAML ve většině případů, kdy je XAML již načten. Místo pokusu o nastavení Name v kódu použijte NameScope metody z kódu s odpovídajícím namescope.

Name lze také nastavit pomocí syntaxe elementu vlastnosti s vnitřním textem, ale to je neobvyklé. Naproti tomu x:Name nelze nastavit v syntaxi elementu vlastnosti XAML ani v kódu pomocí SetValue; lze nastavit pouze pomocí syntaxe atributů u objektů, protože se jedná o direktivu.

Poznámky k používání silverlightu

x:Name pro Silverlight je dokumentován samostatně. Další informace najdete v tématu Funkce jazyka XAML (x:) Language Features (Silverlight).

Viz také