FrameworkElement.FindName(String) Metode

Definisi

Mengambil objek yang memiliki nama pengidentifikasi yang ditentukan.

public:
 virtual Platform::Object ^ FindName(Platform::String ^ name) = FindName;
IInspectable FindName(winrt::hstring const& name);
public object FindName(string name);
function findName(name)
Public Function FindName (name As String) As Object

Parameter

name
String

Platform::String

winrt::hstring

Nama objek yang diminta.

Mengembalikan

Object

Platform::Object

IInspectable

Objek yang diminta. Ini bisa null jika tidak ada objek yang cocok yang ditemukan di namescope XAML saat ini.

Keterangan

Penting

Untuk menggunakan metode FindName secara efektif, Anda harus memahami konsep namescope XAML, dan bagaimana namescope XAML dibuat pada waktu muat XAML lalu direferensikan dan mungkin dimodifikasi pada durasi. Untuk informasi selengkapnya, lihat namescope XAML.

Penggunaan FindName yang paling umum dalam kode Windows Runtime Anda adalah dari dalam panggilan InitializeComponent yang dihasilkan untuk halaman XAML. Dalam situasi ini, FindName dipanggil hanya setelah halaman XAML dimuat. InitializeComponent menyediakan infrastruktur sedemikian rupa sehingga objek apa pun yang dibuat oleh pemuatan XAML dapat dengan mudah diakses oleh kode di belakang kode Anda. Anda kemudian dapat mereferensikan objek sebagai variabel yang memiliki nama yang sama dengan atribut x:Name yang dideklarasikan markup.

API run-time seperti FindName bekerja melawan pohon objek run-time aplikasi karena ada dalam memori. Ketika bagian dari pohon objek ini dibuat dari templat atau XAML yang dimuat run-time, namescope XAML biasanya tidak berdampingan dalam pohon objek tersebut. Hasilnya adalah mungkin ada objek bernama di pohon objek yang tidak dapat ditemukan oleh lingkup FindName tertentu. Penghentian antara namescope XAML yang mungkin Anda temui dalam skenario aplikasi umum adalah ketika objek dibuat dengan menerapkan templat, atau ketika objek dibuat oleh panggilan ke XamlReader.Load dan kemudian ditambahkan ke pohon objek.

Jika Anda mengembalikan hasil null yang tidak terduga untuk FindName, coba teknik ini:

  • Untuk objek bernama yang berasal dari templat, jika Anda mendefinisikan atau berasal dari kontrol, Anda dapat memanggil GetTemplateChild dari cakupan objek tempat templat diterapkan. Anda harus berada dalam cakupan definisi kelas turunan untuk menggunakan GetTemplateChild, karena ini adalah metode Kontrol yang dilindungi.
  • Jika Anda tidak berada dalam cakupan definisi kelas turunan, Anda mungkin dapat memasukkan pohon visual templat, dengan menggunakan VisualTreeHelper pada titik dalam masa pakai objek setelah templat diterapkan (menangani peristiwa Dimuat ). VisualTreeHelper menggunakan metafora induk-anak untuk berjalan di pohon, daripada menggunakan konsep namescope XAML. Berjalan di pohon umumnya membutuhkan pengetahuan khusus tentang komposisi kontrol karena berasal dari templat tertentu. Anda dapat menggunakan VisualTreeHelper.GetChild pada kontrol untuk mendapatkan akar templat kontrol yang diterapkan, dan memanggil FindName secara khusus pada akar templat untuk mengakses elemen yang dinamai dalam templat XAML.
  • Untuk kasus XamlReader.Load , Anda harus mempertahankan referensi ke nilai pengembalian panggilan XamlReader.Load , yang merupakan objek yang akan menjadi pemilik atau dasar namescope XAML yang dibuat yang relevan. Kemudian panggil FindName dari cakupan tersebut sebagai gantinya.

Objek yang dikembalikan oleh FindName belum tentu merupakan FrameworkElement. Misalnya, Anda mungkin menerapkan nama ke papan cerita animasi, dan berbagai jenis papan cerita animasi tidak berasal dari FrameworkElement.

Properti Nama untuk objek (atau atribut x:Name serupa) ditetapkan dengan menentukan atribut pada elemen objek dalam markup XAML. Anda dapat mengatur nilai Nama setelah sumber awal XAML dimuat, tetapi teknik ini memiliki beberapa batasan (lihat Keterangan dalam Nama).

TextElement mendefinisikan FindName serupa. Ini memungkinkan perilaku FindName dalam model objek, yang tidak terbatas pada FrameworkElement. Panggilan dengan salah satu implementasi FindName dapat melintasi ke pohon objek elemen FrameworkElement / text campuran, dan menggunakan namescope XAML umum sehingga panggilan FrameworkElement.FindName dapat menemukan elemen teks bernama, dan sebaliknya.

Nilai nama yang ditambahkan atau diubah pada durasi di pohon objek akan diperbarui ke dalam namescope XAML bertindak pada tingkat tersebut di pohon objek. Dengan kata lain, jika Anda membuat FrameworkElement baru, beri Nama, lalu menambahkannya ke pohon objek, memanggil FindName dari dalam namescope XAML tersebut dapat menemukan dan mengembalikan objek yang dibuat kode.

Berlaku untuk

Lihat juga