Bagikan melalui


Interoperasi WPF dan Formulir Windows

WPF dan Formulir Windows 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.

Catatan

Pertimbangan khusus diberikan pada skenario kontrol hibrid. Kontrol hibrid memiliki kontrol dari satu teknologi yang bersarang dalam kontrol dari teknologi lain. Ini juga disebut interoperatasi berlapis. Kontrol hibrid multitingkat memiliki lebih dari satu tingkat sarang kontrol hibrid. Contoh interoperasi berlapis berlapis adalah kontrol Formulir Windows yang berisi kontrol WPF, yang berisi kontrol Formulir Windows lain. Kontrol hibrid multitingkat tidak didukung.

Menghosting Kontrol Formulir Windows di WPF

Skenario interoperaksi berikut didukung saat kontrol WPF menghosting kontrol Formulir Windows:

  • Kontrol WPF dapat menghosting satu atau beberapa kontrol Formulir Windows menggunakan XAML.

  • Ini dapat menghosting satu atau beberapa kontrol Formulir Windows menggunakan kode.

  • Ini dapat menghosting kontrol kontainer Formulir Windows yang berisi kontrol Formulir Windows lainnya.

  • Ini dapat menghosting formulir master/detail dengan master WPF dan detail Formulir Windows.

  • Ini dapat menghosting formulir master/detail dengan master Formulir Windows dan detail WPF.

  • Ini dapat menghosting satu atau beberapa kontrol ActiveX.

  • Ini dapat menghosting satu atau beberapa kontrol komposit.

  • Ini dapat menghosting kontrol hibrid menggunakan Extensible Application Markup Language (XAML).

  • Ini dapat menghosting kontrol hibrid menggunakan kode.

Dukungan Tata Letak

Daftar berikut menjelaskan batasan yang diketahui ketika WindowsFormsHost elemen mencoba mengintegrasikan kontrol Formulir Windows yang dihosting ke dalam sistem tata letak WPF.

  • Dalam beberapa kasus, kontrol Formulir Windows tidak dapat diubah ukurannya, atau hanya dapat diubah ukurannya ke dimensi tertentu. Misalnya, kontrol Formulir Windows 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.

  • Formulir Windows kontrol tidak dapat diputar atau condong. Misalnya, saat Anda memutar antarmuka pengguna sebesar 90 derajat, kontrol Formulir Windows yang dihosting akan mempertahankan posisi tegak.

  • Dalam kebanyakan kasus, kontrol Formulir Windows 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 Formulir Windows mendukung penskalaan.

  • Dalam antarmuka pengguna WPF, Anda dapat mengubah urutan z elemen untuk mengontrol perilaku yang tumpang tindih. Kontrol Formulir Windows yang dihosting digambar dalam HWND terpisah, sehingga selalu digambar di atas elemen WPF.

  • kontrol Formulir Windows mendukung penskalakan otomatis 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 sekitar kontrol WPF memiliki Formulir Windows setara. Properti sekitar ini disebarkan ke kontrol Formulir Windows yang dihosting dan diekspos sebagai properti publik pada WindowsFormsHost kontrol. Kontrol menerjemahkan WindowsFormsHost setiap properti sekitar WPF ke dalam Formulir Windows setara.

Untuk informasi selengkapnya, lihat pemetaan properti Formulir Windows dan WPF.

Perilaku

Tabel berikut ini menjelaskan perilaku interoperabilitas.

Perilaku Didukung Tidak didukung
Transparansi penyajian kontrol Formulir Windows mendukung transparansi. Latar belakang kontrol WPF induk dapat menjadi latar belakang kontrol Formulir Windows yang dihosting. Beberapa kontrol Formulir Windows tidak mendukung transparansi. Misalnya, TextBox kontrol dan ComboBox tidak akan transparan ketika dihosting oleh WPF.
Tabbing Urutan tab untuk kontrol Formulir Windows yang dihosting sama seperti ketika kontrol tersebut dihosting dalam aplikasi berbasis Formulir Windows.

Tab dari kontrol WPF ke kontrol Formulir Windows dengan tombol TAB dan tombol SHIFT+TAB berfungsi seperti biasa.

Formulir Windows kontrol yang memiliki TabStop nilai false properti tidak menerima fokus saat pengguna melakukan tab melalui kontrol.

- Setiap WindowsFormsHost kontrol memiliki TabIndex nilai, yang menentukan kapan kontrol tersebut WindowsFormsHost akan menerima fokus.
- Formulir Windows kontrol yang terkandung di dalam WindowsFormsHost kontainer mengikuti urutan yang ditentukan oleh TabIndex properti . Tab dari indeks tab terakhir menempatkan fokus pada kontrol WPF berikutnya, jika ada. Jika tidak ada kontrol WPF lain yang dapat difokuskan, tab akan kembali ke kontrol Formulir Windows pertama dalam urutan tab.
- TabIndexnilai untuk kontrol di dalam WindowsFormsHost relatif terhadap kontrol Formulir Windows saudara yang terkandung dalam WindowsFormsHost kontrol.
- Tab menghormati perilaku khusus kontrol. Misalnya, menekan tombol TAB dalam TextBox kontrol yang memiliki AcceptsTab nilai true properti memasukkan tab di kotak teks alih-alih memindahkan fokus.
Tidak dapat diterapkan.
Navigasi dengan tombol panah - Navigasi dengan tombol panah dalam WindowsFormsHost kontrol sama seperti pada kontrol kontainer Formulir Windows 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 terkandung dalam WindowsFormsHost kontrol melakukan tindakan yang sama dengan pintasan keyboard SHIFT+TAB. Jika ada kontrol WPF yang dapat difokuskan, fokus bergerak di luar WindowsFormsHost kontrol. Perilaku ini berbeda dari perilaku standar ContainerControl karena tidak ada pembungkusan ke kontrol terakhir yang terjadi. 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 dari kontrol terakhir yang terkandung dalam WindowsFormsHost kontrol melakukan tindakan yang sama dengan tombol TAB. Jika ada kontrol WPF yang dapat difokuskan, fokus bergerak di luar WindowsFormsHost kontrol. Perilaku ini berbeda dari perilaku standar ContainerControl karena tidak ada pembungkusan ke kontrol pertama yang terjadi. 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 seluruh teknologi, dengan setidaknya satu pada kontrol Formulir Windows dan yang lain pada kontrol WPF, kontrol Formulir Windows selalu menerima akselerator. Fokus tidak beralih di antara kontrol ketika akselerator duplikat ditekan.
Kunci pintasan Kunci pintasan berfungsi seperti biasa, kecuali jika dicatat di kolom "Tidak didukung". - Formulir Windows kunci pintasan yang ditangani pada tahap pra-pemrosesan 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.
- Formulir Windows kunci pintasan yang ditangani oleh KeyDown peristiwa diproses terakhir dalam WPF. Anda dapat mencegah perilaku ini dengan mengambil alih metode kontrol IsInputKey Formulir Windows atau menangani PreviewKeyDown peristiwa. Kembali true dari metode , atau atur nilai properti ke PreviewKeyDownEventArgs.IsInputKeytrue di penanganan aktivitas Anda PreviewKeyDownIsInputKey.
AcceptsReturn, AcceptsTab, dan perilaku khusus kontrol lainnya Properti yang mengubah perilaku keyboard default berfungsi seperti biasa, dengan asumsi bahwa kontrol Formulir Windows mengambil alih IsInputKey metode untuk mengembalikan true. Formulir Windows kontrol yang mengubah perilaku keyboard default dengan menangani KeyDown peristiwa diproses terakhir dalam kontrol WPF 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 berisi ElementHost , peristiwa Enter and Leave dinaikkan seperti biasa saat fokus berubah dalam satu WindowsFormsHost kontrol. Peristiwa Enter dan Leave tidak dimunculkan saat perubahan fokus berikut terjadi:

- Dari dalam ke luar WindowsFormsHost kontrol.
- Dari luar ke dalam WindowsFormsHost kontrol.
- Di luar WindowsFormsHost kendali.
- Dari kontrol Formulir Windows yang dihosting dalam WindowsFormsHost kontrol ke kontrol yang ElementHost dihosting di dalam yang samaWindowsFormsHost.
Multithreading Semua varietas multithreading didukung. Teknologi Formulir Windows dan WPF mengasumsikan model konkurensi satu utas. Selama penelusuran kesalahan, panggilan ke objek kerangka kerja dari utas lain akan menimbulkan 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 Formulir Windows dan WPF. Tidak dapat diterapkan.
Clipboard Semua operasi Clipboard berfungsi seperti biasa. Ini termasuk memotong dan menempelkan antara kontrol Formulir Windows dan WPF. Tidak dapat diterapkan.
Fitur seret dan letakkan Semua operasi seret dan letakkan berfungsi seperti biasa. Ini termasuk operasi antara kontrol Formulir Windows dan WPF. Tidak dapat diterapkan.

Hosting Kontrol WPF di Formulir Windows

Skenario interoperaksi berikut didukung saat kontrol Formulir Windows menghosting kontrol WPF:

  • Hosting satu atau beberapa kontrol WPF menggunakan kode.

  • Mengaitkan lembar properti dengan satu atau beberapa kontrol WPF yang dihosting.

  • Hosting satu atau beberapa halaman WPF dalam formulir.

  • Memulai jendela WPF.

  • Hosting formulir master/detail dengan master Formulir Windows dan detail WPF.

  • Hosting formulir master/detail dengan master WPF dan detail Formulir Windows.

  • Menghosting kontrol WPF kustom.

  • Menghosting kontrol hibrid.

Properti Sekitar

Beberapa properti sekitar kontrol Formulir Windows memiliki WPF yang setara. Properti sekitar ini disebarkan ke kontrol WPF yang dihosting dan diekspos sebagai properti publik pada ElementHost kontrol. Kontrol menerjemahkan ElementHost setiap properti sekitar Formulir Windows setara dengan WPF-nya.

Untuk informasi selengkapnya, lihat pemetaan properti Formulir Windows dan WPF.

Perilaku

Tabel berikut ini menjelaskan perilaku interoperabilitas.

Perilaku Didukung Tidak didukung
Transparansi Penyajian kontrol WPF mendukung transparansi. Latar belakang kontrol Formulir Windows induk dapat menjadi latar belakang kontrol WPF yang dihosting. Tidak dapat diterapkan.
Multithreading Semua varietas multithreading didukung. Teknologi Formulir Windows dan WPF mengasumsikan model konkurensi satu utas. Selama penelusuran kesalahan, panggilan ke objek kerangka kerja dari utas lain akan menimbulkan 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 Formulir Windows dan WPF. Tidak dapat diterapkan.
Clipboard Semua operasi Clipboard berfungsi seperti biasa. Ini termasuk memotong dan menempelkan antara kontrol Formulir Windows dan WPF. Tidak dapat diterapkan.
Fitur seret dan letakkan Semua operasi seret dan letakkan berfungsi seperti biasa. Ini termasuk operasi antara kontrol Formulir Windows dan WPF. Tidak dapat diterapkan.

Baca juga