Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini menjelaskan bagaimana elemen WindowsFormsHost berinteraksi dengan sistem tata letak WPF.
WPF dan Windows Forms mendukung logika yang berbeda, tetapi serupa untuk elemen ukuran dan posisi pada formulir atau halaman. Saat Anda membuat antarmuka pengguna hibrid (UI) yang menghosting kontrol Windows Forms di WPF, elemen WindowsFormsHost mengintegrasikan dua skema tata letak.
Perbedaan Tata Letak Antara Formulir WPF dan Windows
WPF menggunakan tata letak yang tidak tergantung pada resolusi. Semua dimensi tata letak WPF ditentukan menggunakan piksel independen perangkat . Piksel independen perangkat adalah seper sembilan puluh enam inci dan tidak bergantung pada resolusi, sehingga Anda mendapatkan hasil yang serupa, baik saat merender ke monitor 72-dpi atau printer 19.200-dpi.
WPF juga didasarkan pada tata letak dinamis . Ini berarti bahwa elemen UI mengatur dirinya sendiri pada formulir atau halaman sesuai dengan kontennya, kontainer tata letak induknya, dan ukuran layar yang tersedia. Tata letak dinamis memudahkan pelokalan dengan menyesuaikan ukuran dan posisi elemen UI secara otomatis ketika panjang string yang terkandung di dalamnya berubah.
Tata letak dalam Formulir Windows bergantung pada perangkat dan lebih mungkin statis. Biasanya, kontrol Windows Forms diposisikan secara mutlak pada formulir menggunakan dimensi yang ditentukan dalam piksel perangkat keras. Namun, Windows Forms memang mendukung beberapa fitur tata letak dinamis, seperti yang dirangkum dalam tabel berikut.
| Fitur tata letak | Deskripsi |
|---|---|
| Penyesuaian ukuran otomatis | Beberapa kontrol Windows Forms mengubah ukurannya sendiri untuk menampilkan isinya dengan benar. Untuk informasi selengkapnya, lihat Gambaran Umum Properti AutoSize. |
| Pengerjaan jangkar dan pemangkalan | Kontrol Windows Forms mendukung penempatan dan ukuran berdasarkan kontainer induk. Untuk informasi lebih lanjut, lihat Control.Anchor dan Control.Dock. |
| Penyesuaian Otomatis | Kontainer kontrol menyesuaikan ukuran dirinya dan elemen turunannya berdasarkan resolusi perangkat output atau ukuran font kontainer default dalam piksel. Untuk informasi selengkapnya, lihat Penskalaan Otomatis di Windows Forms. |
| Wadah tata letak | Kontrol FlowLayoutPanel dan TableLayoutPanel mengatur kontrol anak mereka dan mengubah ukuran diri sesuai dengan isinya. |
Keterbatasan Tata Letak
Secara umum, kontrol Windows Forms tidak dapat diskalakan dan diubah sejauh mungkin dalam WPF. Daftar berikut menjelaskan batasan yang diketahui ketika elemen WindowsFormsHost mencoba mengintegrasikan kontrol Formulir Windows yang dihosting ke dalam sistem tata letak WPF.
Dalam beberapa kasus, kontrol Windows Forms tidak dapat diubah ukurannya, atau hanya dapat diubah ukurannya ke dimensi tertentu. Misalnya, kontrol Windows Forms ComboBox hanya mendukung satu tinggi, yang ditentukan oleh ukuran font kontrol. Dalam tata letak dinamis WPF di mana elemen dapat membentang secara vertikal, kontrol ComboBox yang dihosting tidak akan membentang seperti yang diharapkan.
Kontrol Formulir Windows tidak dapat diputar atau condong. Elemen WindowsFormsHost menaikkan peristiwa LayoutError jika Anda menerapkan transformasi condong atau rotasi. Jika Anda tidak menangani peristiwa LayoutError, InvalidOperationException akan dinaikkan.
Dalam kebanyakan kasus, kontrol Windows Forms tidak mendukung penskalaan proporsional. Meskipun dimensi kontrol keseluruhan akan menskalakan, kontrol anak dan elemen komponen kontrol mungkin tidak mengubah ukuran seperti yang diharapkan. Batasan ini tergantung pada seberapa baik setiap kontrol Windows Forms mendukung penskalaan. Selain itu, Anda tidak dapat menskalakan kontrol Windows Forms ke ukuran 0 piksel.
Kontrol Windows Forms mendukung autoscaling, di mana formulir akan secara otomatis mengubah ukuran dirinya sendiri dan kontrolnya berdasarkan ukuran font. Dalam antarmuka pengguna WPF, mengubah ukuran font tidak mengubah ukuran seluruh tata letak, meskipun elemen individual dapat mengubah ukuran secara dinamis.
Urutan Z
Dalam antarmuka pengguna WPF, Anda dapat mengubah urutan z elemen untuk mengontrol perilaku yang tumpang tindih. Kontrol Windows Forms yang dihosting ditampilkan dalam HWND terpisah, sehingga selalu muncul di atas elemen WPF.
Kontrol Windows Forms yang dihosting juga digambar di atas elemen Adorner apa pun.
Perilaku Tata Letak
Bagian berikut menjelaskan aspek perilaku tata letak tertentu saat menghosting kontrol Windows Forms di WPF.
Penskalakan, Konversi Unit, dan Kemandirian Perangkat
Setiap kali elemen WindowsFormsHost melakukan operasi yang melibatkan dimensi WPF dan Windows Forms, dua sistem koordinat terlibat: piksel independen perangkat untuk WPF dan piksel perangkat keras untuk Formulir Windows. Oleh karena itu, Anda harus menerapkan konversi unit dan penskalan yang tepat untuk mencapai tata letak yang konsisten.
Konversi antara sistem koordinat tergantung pada resolusi perangkat saat ini dan tata letak atau transformasi penyajian apa pun yang diterapkan ke elemen WindowsFormsHost atau ke leluhurnya.
Jika perangkat output adalah 96 dpi dan tidak ada penskalaan yang diterapkan ke elemen WindowsFormsHost, satu piksel independen perangkat sama dengan satu piksel perangkat keras.
Semua kasus lain memerlukan penskalaan sistem koordinat. Kontrol yang dihosting tidak mengalami perubahan ukuran. Sebaliknya, elemen WindowsFormsHost mencoba untuk menskalakan kontrol yang dihosting dan semua kontrol turunannya. Karena Windows Forms tidak sepenuhnya mendukung penskalakan, elemen WindowsFormsHost diskalakan ke derajat yang didukung oleh kontrol tertentu.
Ambil alih metode ScaleChild untuk memberikan perilaku penskalaan kustom untuk kontrol Windows Forms yang dihosting.
Selain penskalakan, elemen WindowsFormsHost menangani kasus pembulatan dan luapan seperti yang dijelaskan dalam tabel berikut.
| Masalah konversi | Deskripsi |
|---|---|
| Pembulatan | Dimensi piksel independen perangkat WPF ditentukan sebagai double, dan dimensi piksel perangkat keras Windows Forms ditentukan sebagai int. Dalam kasus di mana dimensi berbasis doubledikonversi ke dimensi berbasis int, elemen WindowsFormsHost menggunakan pembulatan standar, sehingga nilai pecahan kurang dari 0,5 dibulatkan ke bawah ke 0. |
| Melimpah | Saat elemen WindowsFormsHost dikonversi dari nilai double menjadi nilai int, luapan dimungkinkan. Nilai yang lebih besar dari MaxValue diatur ke MaxValue. |
Properti terkait tata letak
Properti yang mengontrol perilaku tata letak di kontrol Windows Forms dan elemen WPF dipetakan dengan tepat oleh elemen WindowsFormsHost. Untuk informasi selengkapnya, lihat Windows Forms dan WPF Property Mapping.
Perubahan Tata Letak di Kontrol yang Dihosting
Perubahan tata letak dalam kontrol Formulir Windows yang dihosting disebarkan ke WPF untuk memicu pembaruan tata letak. Metode InvalidateMeasure pada WindowsFormsHost memastikan bahwa perubahan tata letak dalam kontrol yang tertanam menyebabkan sistem tata letak WPF berjalan.
Kontrol Formulir Windows dengan Ukuran yang Dapat Disesuaikan Terus-Menerus
Kontrol Windows Forms yang mendukung penskalakan berkelanjutan sepenuhnya berinteraksi dengan sistem tata letak WPF. Elemen WindowsFormsHost menggunakan metode MeasureOverride dan ArrangeOverride seperti biasa untuk mengukur dan mengatur kontrol Windows Forms yang dihosting.
Algoritma Penentuan Ukuran
Elemen WindowsFormsHost menggunakan prosedur berikut untuk mengukur kontrol yang dihosting:
Elemen WindowsFormsHost mengambil alih metode MeasureOverride dan ArrangeOverride.
Untuk menentukan ukuran kontrol yang dihosting, metode MeasureOverride memanggil metode GetPreferredSize kontrol yang dihosting dengan batasan yang diterjemahkan dari batasan yang diteruskan ke metode MeasureOverride.
Metode ArrangeOverride mencoba mengatur kontrol yang dihosting ke batasan ukuran yang diberikan.
Jika properti Size dari kontrol yang dihosting cocok dengan batasan yang ditentukan, maka kontrol yang dihosting diubah ukurannya sesuai dengan batasan tersebut.
Jika properti Size tidak cocok dengan batasan yang ditentukan, kontrol yang dihosting tidak mendukung ukuran berkelanjutan. Misalnya, kontrol MonthCalendar hanya memungkinkan ukuran diskrit. Ukuran yang diizinkan untuk kontrol ini terdiri dari bilangan bulat (mewakili jumlah bulan) untuk tinggi dan lebar. Dalam kasus seperti ini, elemen WindowsFormsHost berperilaku sebagai berikut:
Jika properti Size mengembalikan ukuran yang lebih besar dari batasan yang ditentukan, elemen WindowsFormsHost akan memotong kontrol yang ditempatkan. Tinggi dan lebar ditangani secara terpisah, sehingga kontrol yang dihosting mungkin terpotong ke salah satu arah.
Jika properti Size mengembalikan ukuran yang lebih kecil dari batasan yang ditentukan, WindowsFormsHost menerima nilai ukuran ini dan mengembalikan nilai ke sistem tata letak WPF.
Lihat juga
- ElementHost
- WindowsFormsHost
- Panduan : Mengatur Kontrol Formulir Windows di WPF
- Mengatur Kontrol Windows Forms pada Contoh WPF
- Pemetaan Properti Formulir Windows dan WPF
- Migrasi dan Interoperabilitas
.NET Desktop feedback