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.
WPF dan Windows Forms menyajikan dua arsitektur berbeda untuk membuat antarmuka aplikasi. Namespace System.Windows.Forms.Integration menyediakan kelas yang mengaktifkan skenario interoperabilitas umum. Dua kelas utama yang mengimplementasikan kemampuan interoperabilitas adalah WindowsFormsHost dan ElementHost. Topik ini menjelaskan skenario interoperaksi mana yang didukung dan skenario mana yang tidak didukung.
Nota
Pertimbangan khusus diberikan pada skenario kontrol hibrid . Pengendalian hibrida memiliki kontrol dari satu teknologi yang terintegrasi dalam kontrol dari teknologi lainnya. Ini juga disebut interoperatasi berlapis. Kontrol hibrid multitingkat memiliki lebih dari satu tingkat sarang kontrol hibrid. Contoh interoperatur berlapis multitingkat adalah kontrol Windows Forms yang berisi kontrol WPF, yang berisi kontrol Windows Forms lainnya. Kontrol hibrid multitingkat tidak didukung.
Hosting Kontrol Formulir Windows di WPF
Skenario interoperasi berikut ini didukung saat kontrol WPF menghosting kontrol Windows Forms:
Kontrol WPF dapat menghosting satu atau beberapa kontrol Windows Forms menggunakan XAML.
Ini mungkin menghosting satu atau beberapa kontrol Windows Forms menggunakan kode.
Ini dapat menghosting kontrol kontainer Windows Forms yang berisi kontrol Formulir Windows lainnya.
Ini dapat menyediakan formulir master/detail dengan master WPF dan detail Windows Forms.
Ini dapat menghosting bentuk master/detail dengan Windows Forms sebagai master dan WPF sebagai detail.
Ini dapat menampung satu atau lebih kontrol ActiveX.
Ini dapat menghosting satu atau beberapa kontrol komposit.
Ini dapat menghosting kendali hibrid menggunakan Extensible Application Markup Language (XAML).
Itu mungkin dapat menghosting kontrol hibrida dengan menggunakan kode.
Dukungan Tata Letak
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, yang mengasumsikan bahwa elemen dapat membentang secara vertikal, kontrol yang dihosting ComboBox tidak akan membentang seperti yang diharapkan.
Kontrol Formulir Windows tidak dapat diputar atau condong. Misalnya, ketika Anda memutar antarmuka pengguna Anda sebesar 90 derajat, kontrol Windows Forms yang dihosting akan mempertahankan posisi tegak.
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.
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 mendukung autoscaling berdasarkan ukuran font. Dalam antarmuka pengguna WPF, mengubah ukuran font tidak mengubah ukuran seluruh tata letak, meskipun elemen individual dapat mengubah ukuran secara dinamis.
Properti Sekitar
Beberapa properti lingkungan kontrol WPF memiliki padanan di Windows Forms. Properti lingkungan ini disebarkan ke kontrol Windows Forms yang dihosting dan diekspos sebagai properti publik pada kontrol WindowsFormsHost. Kontrol WindowsFormsHost menerjemahkan setiap properti lingkungan WPF ke dalam padanan Windows Forms-nya.
Untuk informasi selengkapnya, lihat Windows Forms dan WPF Property Mapping.
Perilaku
Tabel berikut ini menjelaskan perilaku interoperabilitas.
| Perilaku | Didukung | Tidak didukung |
|---|---|---|
| Transparansi | Penyajian kontrol Windows Forms mendukung transparansi. Latar belakang kontrol WPF induk dapat menjadi latar belakang kontrol Windows Forms yang dihosting. | Beberapa kontrol Windows Forms tidak mendukung transparansi. Misalnya, kontrol TextBox dan ComboBox tidak akan transparan ketika dihosting oleh WPF. |
| Penggunaan Tab | Urutan tab untuk kontrol Windows Forms yang dihosting sama seperti ketika kontrol tersebut dihosting dalam aplikasi berbasis Windows Forms. Berpindah dari kontrol WPF ke kontrol Windows Forms dengan tombol TAB dan tombol SHIFT+TAB berfungsi seperti biasanya. Kontrol Windows Forms yang nilai propertinya TabStop adalah false tidak akan menerima fokus ketika pengguna melakukan tab melalui kontrol.- Setiap WindowsFormsHost kontrol memiliki TabIndex nilai, yang menentukan kapan kontrol tersebut WindowsFormsHost akan menerima fokus. - Kontrol Windows Forms yang terkandung di dalam WindowsFormsHost kontainer mengikuti urutan yang ditentukan oleh TabIndex properti . Melakukan tabulasi dari indeks tab terakhir mengalihkan fokus ke elemen WPF berikutnya, jika ada. Jika tidak ada kontrol WPF lain yang dapat difokuskan, tab akan kembali ke kontrol Formulir Windows pertama dalam urutan tab. - TabIndex nilai untuk kontrol di dalam WindowsFormsHost bersifat relatif terhadap kontrol saudara Windows Forms yang terkandung dalam WindowsFormsHost. - Tab menghormati perilaku khusus kontrol. Misalnya, menekan tombol TAB dalam TextBox kontrol yang nilai propertinya adalah AcceptsTab akan memasukkan tab ke dalam kotak teks alih-alih memindahkan fokus. |
Tidak dapat diterapkan. |
| Navigasi dengan tombol panah | - Navigasi dengan tombol panah dalam WindowsFormsHost kontrol sama seperti dalam kontrol kontainer Windows Forms biasa: Tombol PANAH ATAS dan PANAH KIRI memilih kontrol sebelumnya, dan tombol PANAH BAWAH dan PANAH KANAN memilih kontrol berikutnya. - Tombol PANAH ATAS dan PANAH KIRI dari kontrol pertama yang ada dalam WindowsFormsHost memiliki fungsi yang sama dengan pintasan keyboard SHIFT+TAB. Jika ada kontrol WPF yang dapat difokuskan, fokus berpindah keluar dari kontrol WindowsFormsHost. Perilaku ini berbeda dari perilaku standar ContainerControl karena tidak terjadi penyambungan ke kontrol terakhir. Jika tidak ada kontrol WPF lain yang dapat difokuskan, fokus akan kembali ke kontrol Formulir Windows terakhir dalam urutan tab. - Tombol PANAH BAWAH dan PANAH KANAN pada kontrol terakhir dalam kontrol WindowsFormsHost melakukan tindakan yang sama dengan tombol TAB. Jika ada kontrol WPF yang dapat difokuskan, fokus berpindah keluar dari kontrol WindowsFormsHost. Perilaku ini berbeda dari perilaku standar ContainerControl karena tidak terjadi pengalihan ke kontrol pertama. Jika tidak ada kontrol WPF lain yang dapat difokuskan, fokus akan kembali ke kontrol Formulir Windows pertama dalam urutan tab. |
Tidak dapat diterapkan. |
| Akselerator | Akselerator berfungsi seperti biasa, kecuali jika dicatat di kolom "Tidak didukung". | Akselerator duplikat di seluruh teknologi tidak berfungsi seperti akselerator duplikat biasa. Ketika akselerator diduplikasi di berbagai teknologi, dengan setidaknya satu pada kontrol Windows Forms dan satu lagi pada kontrol WPF, kontrol Windows Forms selalu menerima akselerator. Fokus tidak beralih di antara kontrol ketika akselerator duplikat ditekan. |
| tombol pintasan | Kunci pintasan berfungsi seperti biasa, kecuali jika dicatat di kolom "Tidak didukung". | - Tombol pintasan Windows Forms yang ditangani pada tahap prapemroseduran selalu diutamakan daripada kunci pintasan WPF. Misalnya, jika Anda memiliki ToolStrip kontrol dengan kunci pintasan CTRL+S yang ditentukan, dan ada perintah WPF yang terikat ke CTRL+S, ToolStrip handler kontrol selalu dipanggil terlebih dahulu, terlepas dari fokus. - Tombol pintasan Windows Forms yang ditangani oleh peristiwa KeyDown diproses terakhir di WPF. Anda dapat mencegah perilaku ini dengan mengambil alih metode kontrol IsInputKey Windows Forms atau menangani PreviewKeyDown peristiwa. Kembali true dari metode IsInputKey, atau atur nilai properti PreviewKeyDownEventArgs.IsInputKey ke true di penangan acara Anda PreviewKeyDown. |
| AcceptsReturn, AcceptsTab, dan perilaku khusus kontrol lainnya | Properti-properti yang mengubah perilaku default keyboard berfungsi sebagaimana mestinya, dengan asumsi kontrol Windows Forms menggantikan metode IsInputKey untuk mengembalikan true. |
Kontrol Windows Forms yang mengubah perilaku keyboard default dengan menangani event KeyDown diproses terakhir oleh kontrol WPF pada host. Karena kontrol ini diproses terakhir, kontrol ini dapat menghasilkan perilaku yang tidak terduga. |
| Masukkan dan Tinggalkan Peristiwa | Saat fokus tidak masuk ke kontrol yang mencakup ElementHost, peristiwa Enter dan Leave dipicu seperti biasa ketika fokus berubah dalam satu kontrol WindowsFormsHost. | Peristiwa Enter dan Leave tidak dimunculkan saat perubahan fokus berikut terjadi: - Dari dalam ke luar pengendalian WindowsFormsHost. - Dari luar ke dalam WindowsFormsHost kontrol. - Di luar WindowsFormsHost kendali. - Dari kontrol Windows Forms yang dihosting dalam kontrol WindowsFormsHost ke kontrol ElementHost yang dihosting di dalam WindowsFormsHost yang sama. |
| Pemrosesan Multibenang | Semua jenis multithreading didukung. | Teknologi Windows Forms dan WPF mengasumsikan model konkurensi satu utas. Selama proses debugging, panggilan ke objek kerangka kerja dari utas lain akan memunculkan pengecualian untuk menegakkan persyaratan ini. |
| Keamanan | Semua skenario interoperabilitas memerlukan kepercayaan penuh. | Tidak ada skenario interoperabilitas yang diizinkan dalam kepercayaan parsial. |
| Aksesibilitas | Semua skenario aksesibilitas didukung. Produk teknologi bantuan berfungsi dengan benar ketika digunakan untuk aplikasi hibrid yang berisi kontrol Windows Forms dan WPF. | Tidak dapat diterapkan. |
| Clipboard | Semua operasi Clipboard berfungsi seperti biasa. Ini termasuk memotong dan menempelkan antara Windows Forms dan kontrol WPF. | Tidak dapat diterapkan. |
| Fitur seret dan letakkan | Semua operasi tarik dan lepas berfungsi seperti biasa. Ini termasuk operasi antara kontrol Windows Forms dan WPF. | Tidak dapat diterapkan. |
Menampung Kontrol WPF dalam Windows Form
Skenario interoperaksi berikut didukung ketika kontrol Windows Forms menghosting kontrol WPF:
Hosting satu atau beberapa kontrol WPF menggunakan kode.
Mengaitkan lembar properti dengan satu atau beberapa kontrol WPF yang dihosting.
Menempatkan satu atau beberapa halaman WPF dalam form.
Memulai jendela WPF.
Menyediakan hosting untuk form master/detail dengan Windows Forms sebagai master dan WPF sebagai detail.
Menyediakan formulir master/detail dengan WPF sebagai master dan Windows Forms sebagai detail.
Menghosting kontrol WPF kustom.
Menghosting kontrol hibrid.
Properti Sekitar
Beberapa properti lingkungan dari kontrol Windows Forms memiliki padanan WPF. Properti lingkungan ini disebarkan ke kontrol WPF yang di-host dan diekspos sebagai properti publik pada kontrol ElementHost. Kontrol ElementHost menerjemahkan setiap properti ambien Formulir Windows ke padanan WPF-nya.
Untuk informasi selengkapnya, lihat Windows Forms dan WPF Property Mapping.
Perilaku
Tabel berikut ini menjelaskan perilaku interoperabilitas.
| Perilaku | Didukung | Tidak didukung |
|---|---|---|
| Transparansi | Penyajian kontrol WPF mendukung transparansi. Latar belakang kontrol Windows Forms induk dapat menjadi latar belakang kontrol WPF yang dihosting. | Tidak dapat diterapkan. |
| Pemrosesan Multibenang | Semua jenis multithreading didukung. | Teknologi Windows Forms dan WPF mengasumsikan model konkurensi satu utas. Selama proses debugging, panggilan ke objek kerangka kerja dari utas lain akan memunculkan pengecualian untuk menegakkan persyaratan ini. |
| Keamanan | Semua skenario interoperabilitas memerlukan kepercayaan penuh. | Tidak ada skenario interoperabilitas yang diizinkan dalam kepercayaan parsial. |
| Aksesibilitas | Semua skenario aksesibilitas didukung. Produk teknologi bantuan berfungsi dengan benar ketika digunakan untuk aplikasi hibrid yang berisi kontrol Windows Forms dan WPF. | Tidak dapat diterapkan. |
| Clipboard | Semua operasi Clipboard berfungsi seperti biasa. Ini termasuk memotong dan menempelkan antara Windows Forms dan kontrol WPF. | Tidak dapat diterapkan. |
| Fitur seret dan letakkan | Semua operasi tarik dan lepas berfungsi seperti biasa. Ini termasuk operasi antara kontrol Windows Forms dan WPF. | Tidak dapat diterapkan. |
Lihat juga
- ElementHost
- WindowsFormsHost
- Pengantar Langkah-langkah : Menghosting Kontrol Formulir Windows di WPF
- Panduan Langkah demi Langkah : Menghosting Kontrol Komposit Windows Forms di WPF
- Panduan Langkah-demi-Langkah: Menghosting Kontrol Komposit WPF di Windows Forms
- Pemetaan Properti Formulir Windows dan WPF
.NET Desktop feedback