Bagikan melalui


FrameworkElement.OnApplyTemplate Metode

Definisi

Dipanggil setiap kali kode aplikasi atau proses internal (seperti kode tata letak pembangunan ulang) memanggil ApplyTemplate. Dalam istilah yang paling sederhana, ini berarti metode dipanggil tepat sebelum elemen UI ditampilkan di aplikasi Anda. Ambil alih metode ini untuk memengaruhi logika pasca-templat default kelas.

protected:
 virtual void OnApplyTemplate() = OnApplyTemplate;
void OnApplyTemplate();
protected virtual void OnApplyTemplate();
function onApplyTemplate()
Protected Overridable Sub OnApplyTemplate ()

Contoh

Contoh ini menunjukkan penimpaan OnApplyTemplate yang ditentukan oleh kontrol kustom. Penimpaan dirancang untuk memperhitungkan penelepon yang berpotensi mendefinisikan dan menerapkan templat kontrol mereka sendiri melalui templat dan sistem gaya. Sebagai bagian dari definisinya, kontrol mengaitkan elemen bernama dalam templat yang diperlukan, seperti "UpButton". Kemudian OnApplyTemplate mengambil referensi objek berdasarkan kontrak penamaan ini ketika templat dimuat, memanggil GetTemplateChild. (Nilai yang diatur, misalnya "UpButtonElement", lihat bidang privat yang ditentukan pada tingkat kelas sehingga anggota kelas lain dapat mereferensikan bagian tersebut sebagai objek pada durasi.) Selain itu, contoh ini memanggil metode UpdateStates privat (definisi tidak ditampilkan). Ini adalah skenario umum lain untuk OnApplyTemplate: memastikan bahwa status visual diatur untuk status awal kontrol, dalam hal ini dengan memanggil metode privat yang memperhitungkan semua status yang ditentukan kontrol dan memanggil GoToState untuk mengatur status yang sesuai.

protected override void OnApplyTemplate()
{
    UpButtonElement = GetTemplateChild("UpButton") as RepeatButton;
    DownButtonElement = GetTemplateChild("DownButton") as RepeatButton;
    TextElement = GetTemplateChild("TextBlock") as TextBlock;

    UpdateStates(false);
}
Protected Overloads Sub OnApplyTemplate()
    UpButtonElement = TryCast(GetTemplateChild("UpButton"), RepeatButton)
    DownButtonElement = TryCast(GetTemplateChild("DownButton"), RepeatButton)
    TextElement = TryCast(GetTemplateChild("TextBlock"), TextBlock)

    UpdateStates(False)
End Sub

Keterangan

Meskipun OnApplyTemplate adalah metode yang ditentukan oleh kelas FrameworkElement , perilaku OnApplyTemplate dan skenario untuk mengambil alih OnApplyTemplate terutama relevan dengan subkelas Kontrol . Ini karena properti Templat yang biasanya Anda tentukan dalam file XAML dan logika Windows Runtime internal yang menerapkan templat khusus untuk kontrol. Perilaku templat khusus juga ada untuk ContentPresenter dan ContentControl.

Catatan untuk pelaksana

Ada implementasi dasar dari metode ini yang diimplementasikan sebagai perilaku internal Windows Runtime, yang menyediakan beberapa logika tata letak dasar. Anda harus selalu memanggil implementasi dasar dari implementasi Anda. Gagal mereferensikan implementasi dasar dapat mengakibatkan perilaku tata letak yang tidak diinginkan.

Kelas turunan dapat menggunakan metode ini sebagai pemberitahuan atau titik masuk untuk skenario berikut:

  • Bangun sisa pohon visual menggunakan kode kustom.
  • Jalankan kode yang hanya dapat berfungsi setelah pohon visual yang ditentukan XAML dari templat telah diterapkan. Misalnya, kode yang mendapatkan referensi ke elemen bernama yang berasal dari templat, dengan memanggil GetTemplateChild, sehingga anggota bagian-bagian ini dapat direferensikan oleh kode runtime pasca-templat lainnya.
  • Memperkenalkan layanan yang hanya masuk akal untuk ada setelah pohon visual dari templat selesai.
  • Lampirkan penanganan aktivitas yang ditentukan kelas ke bagian templat, atau induk kontrol kontrol komposit. Misalnya, Anda mungkin ingin logika kelas menangani peristiwa KeyDown yang dirutekan dari bagian templat TextBox dari kontrol komposit. Anda akan melakukan ini sehingga status UI diperbarui berdasarkan peristiwa input tingkat rendah dari bagian tersebut, dan peristiwa lain yang khusus untuk kontrol Anda dan dinaikkan oleh induk kontrol dinaikkan sebagai gantinya.
  • Atur status dan properti elemen dalam templat yang bergantung pada faktor lain. Misalnya, nilai properti mungkin hanya dapat ditemukan dengan mengetahui elemen induk, atau ketika kelas turunan tertentu menggunakan templat umum. Namun, perhatikan bahwa kontrol yang dirancang dengan baik harus menangani status visualnya dengan VisualStateManager. Untuk informasi selengkapnya tentang konsep ini, lihat Mulai Cepat: Mengontrol templat.

OnApplyTemplate sering kali merupakan titik yang lebih tepat untuk menangani penyesuaian pada pohon visual yang dibuat templat daripada peristiwa Yang dimuat . Peristiwa Dimuat mungkin terjadi sebelum templat diterapkan, dan pohon visual mungkin tidak lengkap saat Dimuat.

Berlaku untuk

Lihat juga