FrameworkElement.SizeChanged Kejadian
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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 ( ActualHeight atau ActualWidth) telah berubah pada objek, yang setelah pass Pengukuran dan Susun selesai.
Data peristiwa SizeChangedEventArgs untuk peristiwa menyediakan SizeChanged
dua properti: nilai PreviousSize , 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 SizeChanged
peristiwa 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, ketika 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 berlalu dan dengan demikian peristiwa SizeChanged terjadi. Setelah itu, selama masa pakai aplikasi, SizeChanged
peristiwa dapat diaktifkan dari elemen lagi jika ActualHeight
nilai 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 disegarkan 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 sekarang mungkin memiliki lebih banyak atau kurang ruang yang tersedia, dan itu dapat mengakibatkan 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 disegarkan 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 turunan tata letak adaptif dalam halaman tersebut yang menggunakan tata letak atau
Stretch
perataan "Otomatis" 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 SizeChanged
handler. Misalnya: mengatur Tinggi atau Lebar; memanggil InvalidateMeasure atau UpdateLayout; memanggil ApplyTemplate; operasi apa pun yang mungkin mengubah ukuran elemen turunan 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 menentukan 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 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, LayoutUpdated
kemunculan tidak terlingkup ke properti tata letak objek tertentu, ini melaporkan seluruh pohon visual tempat objek berada.
LayoutUpdated
memberi tahu Anda bahwa sesuatu 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 menggelegak 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
.