FrameworkElement.SizeChanged Kejadian

Definisi

Terjadi ketika properti ActualHeight atau ActualWidth mengubah nilai pada FrameworkElement.

public:
 virtual event SizeChangedEventHandler ^ SizeChanged;
// Register
event_token SizeChanged(SizeChangedEventHandler const& handler) const;

// Revoke with event_token
void SizeChanged(event_token const* cookie) const;

// Revoke with event_revoker
FrameworkElement::SizeChanged_revoker SizeChanged(auto_revoke_t, SizeChangedEventHandler const& handler) const;
public event SizeChangedEventHandler SizeChanged;
function onSizeChanged(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("sizechanged", onSizeChanged);
frameworkElement.removeEventListener("sizechanged", onSizeChanged);
- or -
frameworkElement.onsizechanged = onSizeChanged;
Public Custom Event SizeChanged As SizeChangedEventHandler 
<frameworkElement SizeChanged="eventhandler"/>

Jenis Acara

Keterangan

SizeChanged diaktifkan setiap kali ukuran ( Baik ActualHeight atau ActualWidth) telah berubah pada objek, yaitu setelah pass Pengukuran dan Susun selesai.

Data peristiwa SizeChangedEventArgs untuk peristiwa SizeChanged menyediakan dua properti: nilai PreviousSize , yang mewakili ukuran elemen sebelum perubahan tata letak terjadi, dan nilai NewSize , mewakili ukuran saat ini. Untuk mendapatkan info tinggi dan lebar, gunakan nilai Tinggi dan Lebar dari nilai struktur Ukuran untuk properti SizeChangedEventArgs ini dalam penanganan aktivitas Anda.

Salah satu alasan untuk menangani peristiwa SizeChanged adalah untuk melihat apakah rasio ActualHeight elemen versus ActualWidth telah berubah, karena tata letak baru. Misalnya, ini mungkin terjadi jika pengguna telah mengubah ukuran jendela aplikasi dan tampilan aplikasi keseluruhan sekarang menjadi tampilan yang sempit.

SizeChanged terjadi selama tata letak awal elemen pada halaman, saat aplikasi pertama kali diaktifkan, karena nilai ActualHeight dan ActualWidth untuk elemen UI tidak terdefinisi sebelum tata letak terjadi. Mereka hanya mendapatkan nilai selama tata letak awal lulus dan dengan demikian peristiwa SizeChanged terjadi. Setelah itu, selama masa pakai aplikasi, peristiwa SizeChanged dapat diaktifkan dari elemen lagi jika nilai ActualHeight dan ActualWidth berubah karena alasan lain. Ini termasuk:

  • Kode yang menyesuaikan Tinggi dan Lebar elemen tersebut secara khusus.
  • Kode yang mengubah properti batasan (seperti MinHeight atau MaxHeight yang memengaruhi ActualHeight).
  • Nilai pengikatan data di-refresh atau gaya baru diterapkan yang memengaruhi salah satu properti terkait tata letak FrameworkElement.
  • Kode yang menyesuaikan dimensi kontainer seperti Panel atau ListBox yang merupakan induk elemen. Ini sering memicu kode tata letak. Karena kondisi tata letak baru, elemen turunan yang terkandung mungkin sekarang memiliki lebih banyak atau kurang ruang yang tersedia, dan itu dapat menghasilkan ActualHeight dan ActualWidth baru untuk elemen di dalamnya.
  • Perubahan lain yang terjadi pada run-time yang mengubah ruang tata letak meskipun tidak secara langsung mengubah properti tata letak FrameworkElement . Misalnya, daftar yang didasarkan pada pengikatan data ke item mungkin di-refresh atau diperbarui, dan itu dapat menyebabkan perubahan ukuran dalam item, kontrol item, tampilan daftar, dan sebagainya. Atau tampilan daftar yang mendukung pemuatan inkremental mungkin mengambil lebih banyak item dan memperluas tampilan daftar.
  • Pengguna mengubah ukuran Jendela aplikasi (Window.SizeChanged terjadi), yang pada gilirannya memengaruhi ukuran Halaman tingkat atas dan mungkin ukuran elemen yang diturunkan tata letak adaptif dalam halaman tersebut yang menggunakan tata letak "Otomatis" atau Perataan stretch dan tidak menentukan dimensi.
  • Perubahan ApplicationView atau perubahan DisplayInformation yang pada akhirnya memengaruhi dimensi jendela dan halaman, dan berpotensi semua elemen UI di dalamnya.

Tidak perlu benar-benar untuk menghindari panggilan API lain yang memengaruhi tata letak objek saat ini dari dalam handler SizeChanged. Misalnya: mengatur Tinggi atau Lebar; memanggil InvalidateMeasure atau UpdateLayout; memanggil ApplyTemplate; operasi apa pun yang mungkin mengubah ukuran elemen anak dan dengan demikian membatalkan tata letak induk. Mesin tata letak memiliki logika internal yang menstabilkan nilai sebelum objek menembakkan peristiwa lagi, sehingga logika biasanya cukup kuat untuk menghindari kondisi perulangan. Namun, masih mungkin untuk secara tidak sengaja mendefinisikan perulangan ukuran atau penyajian yang dapat menggantung aplikasi Anda, yang umumnya melemparkan pengecualian seperti LayoutCycleException daripada benar-benar menggantung. Ini terjadi jika logika handler Anda dikombinasikan dengan tata letak di sekitarnya tidak mampu mencapai hasil akhir untuk ukuran objek yang relevan.

Jika posisi objek dalam kontainer induk berubah, tetapi bukan ukurannya, SizeChanged tidak akan terjadi.

LayoutUpdated adalah peristiwa serupa, tetapi LayoutUpdated juga diaktifkan untuk perubahan posisi. Selain itu, kemunculan LayoutUpdated tidak terlingkup ke properti tata letak objek tertentu, hal ini melaporkan seluruh pohon visual tempat objek berada. LayoutUpdated memberi tahu Anda bahwa sesuatu di dalam pohon visual keseluruhan yang berisi objek telah berubah, tetapi tata letak spesifik (ukuran, posisi) objek tempat handler dilampirkan mungkin tidak berubah.

Meskipun peristiwa ini menggunakan delegasi terkait RoutedEventHandler dan kelas turunan RoutedEventArgs sebagai data peristiwa, peristiwa tersebut sebenarnya bukan peristiwa yang dirutekan. Ini tidak menggelembung melalui pohon objek. Ini hanya dapat ditangani pada elemen yang berasal dari peristiwa (dengan kata lain, pengirim). OriginalSource dalam data peristiwa untuk peristiwa ini selalu null, jadi jangan mencoba menggunakan OriginalSource.

Berlaku untuk

Lihat juga