x:Name — dyrektywa

Unikatowo identyfikuje elementy zdefiniowane w języku XAML w zakresach nazw XAML. Zakresy nazw XAML i ich modele unikatowości mogą być stosowane do obiektów utworzonych w wystąpieniach, gdy struktury zapewniają interfejsy API lub implementują zachowania, które mają dostęp do grafu obiektów utworzonych w języku XAML w czasie działania.

Użycie atrybutu języka XAML

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

Wartości XAML

XAMLNameValue Ciąg zgodny z ograniczeniami gramatyki XamlName.

Uwagi

Po zastosowaniu do modelu programowania zapasowego struktury nazwa jest równoważna zmiennej, która przechowuje odwołanie do obiektu lub wystąpienie zwrócone x:Name przez konstruktor.

Wartość użycia dyrektywy x:Name musi być unikatowa w zakresie nazw XAML. Domyślnie, gdy jest używany przez interfejs API usług XAML platformy .NET, podstawowy zakres nazw XAML jest definiowany w elemencie głównym XAML pojedynczej produkcji XAML i obejmuje elementy, które są zawarte w tej produkcji XAML. Dodatkowe dyskretne zakresy nazw XAML, które mogą wystąpić w jednym środowisku produkcyjnym XAML, mogą być definiowane przez struktury w celu rozwiązania określonych scenariuszy. Na przykład w WPF nowe zakresy nazw XAML są definiowane i tworzone przez dowolny szablon, który jest również zdefiniowany w tej produkcji XAML. Aby uzyskać więcej informacji na temat zakresów nazw XAML (napisanych dla WPF, ale istotnych dla wielu pojęć związanych z zakresem nazw XAML), zobacz WPF XAML Namescopes.

Ogólnie rzecz biorąc, x:Name nie należy stosować w sytuacjach, w których jest również stosowany program x:Key . Implementacje XAML według określonych istniejących platform wprowadziły koncepcje podstawienia między i , ale nie jest to x:Key x:Name zalecane rozwiązanie. Usługi XAML .NET nie obsługują takich koncepcji podstawienia podczas obsługi informacji o nazwie/kluczu, takich INameScope jak lub DictionaryKeyPropertyAttribute .

Reguły dotyczące dopuszczania oraz wymuszania unikatowości nazwy są potencjalnie x:Name definiowane przez określone struktury implementujące. Jednak aby można było używać ich z usługami .NET XAML, definicje struktury unikatowości zakresów nazw XAML powinny być spójne z definicją informacji w tej dokumentacji i powinny używać tych samych reguł dotyczących miejsca, w którym informacje są INameScope stosowane. Na przykład implementacja dzieli różne elementy znaczników na oddzielne zakresy, takie jak słowniki zasobów, drzewo logiczne utworzone przez kod XAML na poziomie strony, szablony i inną odroczoną zawartość, a następnie wymusza unikatowość nazw XAML w każdym z tych zakresów nazw Windows Presentation Foundation (WPF) NameScope XAML.

W przypadku typów niestandardowych, które używają autorzy obiektów XAML usług XAML .NET, można określić lub zmienić właściwość map na x:Name typ. To zachowanie definiuje się, odwołując się do nazwy właściwości do mapowania za pomocą obiektu RuntimeNamePropertyAttribute w kodzie definicji typu. RuntimeNamePropertyAttribute jest atrybutem na poziomie typu.

Using.NET usług XAML logikę zapasową dla obsługi zakresów nazw XAML można zdefiniować w sposób neutralny dla struktury, implementując INameScope interfejs.

Uwagi dotyczące użycia WPF

W ramach standardowej konfiguracji kompilacji dla aplikacji, która używa języka XAML, klas częściowych i kodu, określona wartość staje się nazwą pola, które jest tworzone w kodzie źródłowym podczas przetwarzania przez zadanie kompilacji znaczników, a to pole zawiera odwołanie do WPF x:Name XAML obiektu. Domyślnie utworzone pole jest wewnętrzne. Dostęp do pola można zmienić, określając atrybut x:FieldModifier. W przypadku platform WPF i Silverlight sekwencja jest taka, że kompilacja znaczników definiuje i określa nazwę pola w klasie częściowej, ale wartość jest początkowo pusta. Następnie wygenerowana metoda o nazwie InitializeComponent jest wywoływana z poziomu konstruktora klasy. InitializeComponent Element składa się z wywołań używających każdej z wartości, które istnieją w częściowej klasy zdefiniowanej w języku FindName x:Name XAML, jako ciągów wejściowych. Wartości zwracane są następnie przypisywane do odwołania do pola o podobnej nazwie w celu wypełnienia wartości pól obiektami utworzonymi na podstawie analizy XAML. Wykonanie funkcji umożliwia odwołanie się do grafu obiektów czasu wykonywania przy użyciu nazwy pola /bezpośrednio, zamiast konieczności jawnego wywołania w dowolnym momencie, gdy potrzebne jest odwołanie do obiektu zdefiniowanego InitializeComponent x:Name w FindName języku XAML.

W przypadku aplikacji WPF, która używa obiektów docelowych microsoft Visual Basic i zawiera pliki XAML z akcją kompilacji, podczas kompilacji tworzona jest oddzielna właściwość referencyjna, która dodaje słowo kluczowe do wszystkich elementów, które mają obiekt , aby obsługiwać składnię delegatów obsługi Page WithEvents x:Name Handles zdarzeń. Ta właściwość jest zawsze publiczna. Aby uzyskać więcej informacji, zobacz Visual Basic i Obsługa zdarzeń WPF.

x:Name Jest używany przez procesor XAML WPF do rejestrowania nazwy w zakresie nazw XAML w czasie ładowania, nawet w przypadkach, gdy strona nie jest kompilowana na podstawie akcji kompilacji (na przykład luźnego kodu XAML słownika zasobów). Jedną z przyczyn tego zachowania jest to, że do powiązania może x:Name być potencjalnie ElementName potrzebny. Aby uzyskać szczegółowe informacje, zobacz Omówienie powiązań danych.

Jak wspomniano wcześniej, (lub ) nie x:Name należy stosować w sytuacjach, które Name również używają . x:Key Ma specjalne zachowanie definiowania się jako zakres nazw XAML, ale zwraca wartości Not Implemented lub null dla interfejsów API jako sposób WPF ResourceDictionary INameScope wymuszania tego zachowania. Jeśli parser XAML WPF napotka lub w zdefiniowanym języku XAML, nazwa nie zostanie dodana Name x:Name do żadnego ResourceDictionary zakresów nazw XAML. Próba znalezienia tej nazwy z dowolnego zakresów nazw XAML i FindName metod nie zwróci prawidłowych wyników.

x:Name i Name

W wielu scenariuszach aplikacji WPF można uniknąć użycia atrybutu , ponieważ właściwość zależności określona w domyślnej przestrzeni nazw XAML dla kilku ważnych klas bazowych, takich jak i , spełnia x:Name Name ten sam FrameworkElement FrameworkContentElement cel. Nadal istnieją pewne typowe scenariusze XAML i WPF, w których dostęp kodu do elementu bez właściwości na poziomie struktury Name jest ważny. Na przykład niektóre klasy obsługi animacji i storyboard nie obsługują właściwości, ale często należy się do nich odwoływać w kodzie, aby kontrolować Name animację. Należy określić atrybut na osiach czasu i przekształceniach, które są tworzone w języku XAML, jeśli zamierzasz odwoływać się do nich x:Name później z kodu.

Jeśli element jest dostępny jako właściwość klasy i może być używany zamiennie jako atrybuty, ale wyjątek analizy spowoduje, że oba elementy zostaną określone dla Name Name tego samego x:Name elementu. Jeśli kod XAML jest kompilowany, wyjątek wystąpi w kompilacji znaczników. W przeciwnym razie występuje on podczas ładowania.

Name Można ustawić przy użyciu składni atrybutów XAML i w kodzie przy użyciu . Należy jednak pamiętać, że ustawienie właściwości w kodzie nie tworzy reprezentatywnego odwołania do pola w zakresie nazw XAML w większości przypadków, gdy kod XAML jest SetValue Name już załadowany. Zamiast próbować ustawić w Name kodzie, użyj NameScope metod z kodu względem odpowiedniego zakresów nazw.

Name Można również ustawić przy użyciu składni elementu właściwości z tekstem wewnętrznym, ale jest to nietypowe. Z kolei elementu nie można ustawić w składni elementu właściwości XAML lub w kodzie przy użyciu elementu . Można go ustawić tylko przy użyciu składni atrybutów obiektów, ponieważ jest x:Name SetValue to dyrektywa.

Uwagi dotyczące użycia silverlight

x:Name Program dla programu Silverlight jest dokumentowany oddzielnie. Aby uzyskać więcej informacji, zobacz Przestrzeń nazw XAML (x:) Funkcje językowe (Silverlight).

Zobacz też