Bagikan melalui


x:Direktif Nama

Secara unik mengidentifikasi elemen yang ditentukan XAML dalam namescope XAML. Namescope XAML dan model keunikannya dapat diterapkan ke objek yang dibuat, ketika kerangka kerja menyediakan API atau menerapkan perilaku yang mengakses grafik objek yang dibuat XAML pada run time.

Penggunaan Atribut XAML

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

Nilai XAML

Nilai Deskripsi
XAMLNameValue String yang sesuai dengan batasan XamlName Grammar.

Komentar

Setelah x:Name diterapkan ke model pemrograman dukungan kerangka kerja, namanya setara dengan variabel yang menyimpan referensi objek atau instans seperti yang dikembalikan oleh konstruktor.

Nilai penggunaan direktif x:Name harus unik dalam namescope XAML. Secara default ketika digunakan oleh .NET XAML Services API, namescope XAML utama didefinisikan pada elemen akar XAML dari satu produksi XAML, dan mencakup elemen yang terkandung dalam produksi XAML tersebut. Namescope XAML diskrit tambahan yang mungkin terjadi dalam satu produksi XAML dapat ditentukan oleh kerangka kerja untuk mengatasi skenario tertentu. Misalnya, dalam WPF, namescope XAML baru ditentukan dan dibuat oleh templat apa pun yang juga ditentukan pada produksi XAML tersebut. Untuk informasi selengkapnya tentang namescope XAML (ditulis untuk WPF tetapi relevan untuk banyak konsep namescope XAML), lihat Namescope WPF XAML.

Secara umum, x:Name tidak boleh diterapkan dalam situasi yang juga menggunakan x:Key. Implementasi XAML oleh kerangka kerja tertentu yang ada telah memperkenalkan konsep substitusi antara x:Key dan x:Name, tetapi itu bukan praktik yang direkomendasikan. Layanan XAML .NET tidak mendukung konsep penggantian tersebut saat menangani informasi nama/kunci seperti INameScope atau DictionaryKeyPropertyAttribute.

Aturan untuk izin x:Name serta penegakan keunikan nama berpotensi ditentukan oleh kerangka kerja penerapan tertentu. Namun, agar dapat digunakan dengan Layanan XAML .NET, definisi kerangka kerja keunikan namescope XAML harus konsisten dengan definisi informasi INameScope dalam dokumentasi ini, dan harus menggunakan aturan yang sama mengenai tempat informasi diterapkan. Misalnya, implementasi Windows Presentation Foundation (WPF) membagi berbagai elemen markup menjadi rentang NameScope terpisah, seperti kamus sumber daya, pohon logis yang dibuat oleh XAML tingkat halaman, templat, dan konten lain yang ditangguhkan, lalu memberlakukan keunikan nama XAML dalam masing-masing namescope XAML tersebut.

Untuk jenis kustom yang menggunakan penulis objek XAML Layanan XAML .NET, properti yang memetakan ke x:Name pada jenis dapat dibuat atau diubah. Anda menentukan perilaku ini dengan merujuk nama properti untuk dipetakan dengan RuntimeNamePropertyAttribute dalam kode definisi jenis. RuntimeNamePropertyAttribute adalah atribut tingkat tipe.

Using.NET Layanan XAML, logika pendukung untuk dukungan namescope XAML dapat didefinisikan dengan cara netral kerangka kerja dengan menerapkan antarmuka INameScope.

Catatan Penggunaan WPF

Di bawah konfigurasi build standar untuk aplikasi WPF yang menggunakan XAML, kelas parsial, dan kode di belakang, x:Name yang ditentukan menjadi nama bidang yang dibuat dalam kode dasar ketika XAML diproses oleh tugas build kompilasi markup, dan bidang tersebut menyimpan referensi ke objek. Secara default, bidang yang dibuat bersifat internal. Anda dapat mengubah akses bidang dengan menentukan atribut x:FieldModifier. Di WPF dan Silverlight, urutannya adalah bahwa kompilasi markup menentukan dan memberi nama bidang dalam kelas parsial, tetapi nilai awalnya kosong. Kemudian, metode yang dihasilkan bernama InitializeComponent dipanggil dari dalam konstruktor kelas. InitializeComponent terdiri dari panggilan FindName menggunakan masing-masing nilai x:Name yang ada di bagian yang ditentukan XAML dari kelas parsial sebagai string input. Nilai yang dikembalikan kemudian ditetapkan ke referensi bidang seperti bernama untuk mengisi nilai bidang dengan objek yang dibuat dari penguraian XAML. Eksekusi InitializeComponent memungkinkan untuk mereferensikan grafik objek run time menggunakan nama bidang x:Name / secara langsung, daripada harus memanggil FindName secara eksplisit kapan saja Anda memerlukan referensi ke objek yang ditentukan XAML.

Untuk aplikasi WPF yang menggunakan target Microsoft Visual Basic dan menyertakan file XAML dengan tindakan build Page, properti referensi terpisah dibuat selama kompilasi yang menambahkan kata kunci WithEvents ke semua elemen yang memiliki x:Name, untuk mendukung sintaks Handles untuk delegasi penanganan aktivitas. Properti ini selalu bersifat publik. Untuk informasi selengkapnya, lihat Visual Basic dan Penanganan Peristiwa WPF.

x:Name digunakan oleh prosesor WPF XAML untuk mendaftarkan nama ke dalam namescope XAML pada waktu pemuatan, bahkan untuk kasus di mana halaman tidak dikompilasi markup oleh tindakan build (misalnya, XAML longgar dari kamus sumber daya). Salah satu alasan untuk perilaku ini adalah karena x:Name berpotensi diperlukan untuk pengikatan ElementName. Untuk detailnya, lihat Gambaran Umum Pengikatan Data .

Seperti disebutkan sebelumnya, x:Name (atau Name) tidak boleh diterapkan dalam situasi yang juga menggunakan x:Key. WPF ResourceDictionary memiliki perilaku khusus untuk mendefinisikan dirinya sebagai namescope XAML tetapi mengembalikan nilai Tidak Diimplementasikan atau null untuk API INameScope sebagai cara untuk menegakkan perilaku ini. Jika pengurai WPF XAML menemukan Name atau x:Name dalam ResourceDictionaryyang ditentukan XAML , nama tidak ditambahkan ke namescope XAML apa pun. Mencoba menemukan nama tersebut dari namescope XAML apa pun dan metode FindName tidak akan mengembalikan hasil yang valid.

x:Nama dan Nama

Banyak skenario aplikasi WPF dapat menghindari penggunaan atribut x:Name, karena properti dependensi Name seperti yang ditentukan dalam namespace XAML default untuk beberapa kelas dasar penting seperti FrameworkElement dan FrameworkContentElement memenuhi tujuan yang sama ini. Masih ada beberapa skenario XAML dan WPF umum di mana akses kode ke elemen tanpa properti Name di tingkat kerangka kerja penting. Misalnya, kelas dukungan animasi dan papan cerita tertentu tidak mendukung properti Name, tetapi sering kali perlu dirujuk dalam kode untuk mengontrol animasi. Anda harus menentukan x:Name sebagai atribut pada garis waktu dan transformasi yang dibuat di XAML, jika Anda ingin mereferensikannya dari kode nanti.

Jika Name tersedia sebagai properti di kelas , Name dan x:Name dapat digunakan secara bergantian sebagai atribut, tetapi pengecualian penguraian akan menghasilkan jika keduanya ditentukan pada elemen yang sama. Jika XAML dikompilasi markup, pengecualian akan terjadi pada kompilasi markup, jika tidak, itu terjadi pada beban.

Name dapat diatur menggunakan sintaks atribut XAML, dan dalam kode menggunakan SetValue; namun perhatikan bahwa mengatur properti Name dalam kode tidak membuat referensi bidang perwakilan dalam namescope XAML dalam sebagian besar keadaan di mana XAML sudah dimuat. Alih-alih mencoba mengatur Name dalam kode, gunakan metode NameScope dari kode, terhadap namescope yang sesuai.

Name juga dapat diatur menggunakan sintaks elemen properti dengan teks dalam, tetapi itu jarang terjadi. Sebaliknya, x:Name tidak dapat diatur dalam sintaks elemen properti XAML, atau dalam kode menggunakan SetValue; itu hanya dapat diatur menggunakan sintaks atribut pada objek karena ini adalah direktif.

Catatan Penggunaan Silverlight

x:Name untuk Silverlight didokumenkan secara terpisah. Untuk informasi selengkapnya, lihat XAML Namespace (x:) Language Features (Silverlight).

Lihat juga