WPF ve Windows Forms Birlikte Çalışması

WPF ve Windows Forms uygulama arabirimleri oluşturmak için iki farklı mimarsunun. System.Windows.Forms.IntegrationAd alanı, ortak birlikte çalışma senaryolarını etkinleştiren sınıflar sağlar. Birlikte çalışabilirlik özelliklerini uygulayan iki anahtar sınıfı WindowsFormsHost ve ' dir ElementHost . Bu konu, hangi birlikte çalışma senaryolarının desteklendiğini ve hangi senaryoların desteklenmediğini açıklar.

Not

Karma denetim senaryosuna özel bir değerlendirme verilmiştir. Karma denetim, diğer teknolojideki bir denetimde iç içe yerleştirilmiş bir teknolojiden denetim içerir. Buna iç içe geçmiş birlikte çalışabilirlikda denir. Çok düzeyli karma denetim , birden fazla karma denetim iç içe geçme düzeyine sahiptir. bir çok düzeyli iç içe geçme örneği, başka bir Windows Forms denetimi içeren WPF denetimi içeren Windows Forms denetimidir. Çok düzeyli karma denetimler desteklenmez.

WPF Windows Forms denetimleri barındırma

WPF denetimi bir Windows Forms denetimi barındırıyorsa, aşağıdaki birlikte çalışabilirlik senaryoları desteklenir:

  • WPF denetimi XAML kullanarak bir veya daha fazla Windows Forms denetimini barındırabiliriz.

  • kodu kullanarak bir veya daha fazla Windows Forms denetimini barındıramayabilir.

  • diğer Windows Forms denetimleri içeren Windows Forms kapsayıcı denetimlerini barındıramayabilir.

  • bir WPF ana/ayrıntı formu barındırabilir ve ayrıntılar Windows Forms olabilir.

  • Windows Forms master ve WPF ayrıntılarıyla bir ana/ayrıntı formu barındırabilir.

  • bir veya daha fazla ActiveX denetimini barındıramayabilir.

  • Bir veya daha fazla bileşik denetimi barındıramayabilir.

  • Karma denetimleri Extensible Application Markup Language (XAML) kullanarak barındırabiliriz.

  • Kod kullanarak karma denetimleri barındıramayabilir.

Düzen desteği

aşağıdaki listede, WindowsFormsHost öğesi barındırılan Windows Forms denetimini WPF düzen sistemiyle tümleştirmeye çalıştığında oluşan bilinen sınırlamaları açıklar.

  • bazı durumlarda Windows Forms denetimleri yeniden boyutlandırılamaz veya yalnızca belirli boyutlara boyutlandırılabilir. örneğin, bir Windows Forms ComboBox denetimi yalnızca denetimin yazı tipi boyutu tarafından tanımlanan tek bir yüksekliği destekler. Öğelerin dikey olarak uzatılabileceği varsayan bir WPF dinamik düzeninde barındırılan bir ComboBox Denetim beklendiği gibi genişlemez.

  • Windows Forms denetimleri döndürülemiyor veya eğilemez. örneğin, kullanıcı arabiriminizi 90 derece döndürdüğünüzde barındırılan Windows Forms denetimleri, sağ üst konumlarını korur.

  • çoğu durumda Windows Forms denetimleri orantılı ölçeklendirmeyi desteklemez. Denetimin genel boyutları ölçeklense de, denetimin alt denetimleri ve bileşen öğeleri beklenen şekilde yeniden boyutlandırmayabilir. bu sınırlama, her bir Windows Forms denetiminin ölçeklendirmeyi ne kadar iyi desteklediğine bağlıdır.

  • Bir WPF Kullanıcı arabiriminde, örtüşen davranışı denetlemek için öğelerin z sırasını değiştirebilirsiniz. barındırılan bir Windows Forms denetimi ayrı bir HWND içinde çizilir, bu nedenle her zaman WPF öğelerinin üzerine çizilir.

  • Windows Forms denetimleri, yazı tipi boyutuna bağlı olarak otomatik ölçeklendirmeyi destekler. Bir WPF Kullanıcı arabiriminde, bağımsız öğeler dinamik olarak yeniden boyutlandırabilse de yazı tipi boyutunun değiştirilmesi tüm düzeni yeniden boyutlandıramaz.

Çevresel Özellikler

WPF denetimlerinin bazı çevresel özelliklerinden bazıları Windows Forms eşdeğerleri vardır. bu çevresel özellikler barındırılan Windows Forms denetimlerine yayılır ve denetimde ortak özellikler olarak gösterilir WindowsFormsHost . WindowsFormsHostdenetim her WPF ortam özelliğini Windows Forms eşdeğerine dönüştürür.

daha fazla bilgi için bkz. Windows Forms ve WPF özellik eşleme.

Davranış

Aşağıdaki tabloda birlikte çalışabilirlik davranışı açıklanmaktadır.

Davranış Desteklenir Desteklenmez
Şeffaflık Windows Forms denetim işleme saydamlığı destekler. üst WPF denetiminin arka planı barındırılan Windows Forms denetimlerinin arka planı haline gelebilir. bazı Windows Forms denetimleri saydamlığı desteklemez. Örneğin, TextBox ve ComboBox denetimleri WPF tarafından barındırılırken saydam olmayacaktır.
Sekmeyle gitmeyi barındırılan Windows Forms denetimlerinin sekme sırası, bu denetimlerin Windows Forms tabanlı bir uygulamada barındırıldığı zaman ile aynıdır.

bir WPF denetiminden bir Windows Forms denetimine TAB tuşu ve shıft + TAB tuşları her zamanki gibi kullanılır.

özellik değeri olan Windows Forms denetimleri TabStopfalse , kullanıcı denetimleri üzerinde sekmeden, odağı almaz.

-Her WindowsFormsHost Denetim bir TabIndex değere sahiptir ve bu denetimin ne zaman WindowsFormsHost odak alacağını belirler.
-bir kapsayıcı içinde bulunan Windows Forms denetimleri WindowsFormsHost , özelliği tarafından belirtilen sırayı izler TabIndex . Son sekme dizininden sekme, varsa bir sonraki WPF denetimine odak koyar. odaksız başka bir WPF denetimi yoksa, sekme sırasıyla ilk Windows Forms denetimine geri döner.
- TabIndexiçindeki denetimlerin değerleri, WindowsFormsHost denetimde bulunan eşdüzey Windows Forms denetimlerine göre yapılır WindowsFormsHost .
-Sekme denetimine özgü davranışa kavriler. Örneğin, özellik değeri olan bir denetimdeki sekme tuşuna basmak TextBoxAcceptsTabtrue , odağı taşımak yerine metin kutusunda bir sekme girer.
Geçerli değildir.
Ok tuşlarıyla gezinme -denetimdeki ok tuşlarıyla gezinti, WindowsFormsHost sıradan bir Windows Forms container control ile aynıdır: yukarı ok ve sol ok tuşları önceki denetimi seçer ve aşağı ok ve sağ ok tuşları bir sonraki denetimi seçer.
-Denetimde bulunan ilk denetimin yukarı ok ve sol ok tuşları, WindowsFormsHost SHIFT + TAB klavye kısayoluyla aynı eylemi gerçekleştirir. Odaksız bir WPF denetimi varsa, odak denetimin dışına taşınır WindowsFormsHost . Bu davranış, ContainerControl son denetim için hiçbir sarmalama gerçekleşmediğinde standart davranıştan farklıdır. odaksız başka bir WPF denetimi yoksa, odak sekme sırasına göre son Windows Forms denetimine geri döner.
-Denetimde yer alan son denetimden aşağı ok ve sağ ok tuşları WindowsFormsHost sekme tuşuyla aynı eylemi gerçekleştirir. Odaksız bir WPF denetimi varsa, odak denetimin dışına taşınır WindowsFormsHost . Bu davranış, ContainerControl ilk denetimin hiçbir sarmalama gerçekleşmediğinde standart davranıştan farklıdır. odaksız başka bir WPF denetimi yoksa odak, sekme düzeninde ilk Windows Forms denetimine geri döner.
Geçerli değildir.
Ekleyebilir Hızlandırıcılar, "desteklenmeyen" sütununda belirtilenler dışında her zamanki gibi çalışır. Teknolojilerde yinelenen Hızlandırıcılar, sıradan yinelenen hızlandırıcılar gibi çalışmaz. bir hızlandırıcı teknolojilerde çoğaltıldığında, en az bir Windows Forms denetiminde ve diğer bir WPF denetiminde diğeri varsa, Windows Forms denetimi her zaman hızlandırıcıyı alır. Yinelenen Hızlandırıcı basıldığında odak denetimler arasında geçiş yapmaz.
Kısayol tuşları Kısayol tuşları, "desteklenmeyen" sütununda belirtilenler dışında her zamanki gibi çalışır. -Windows Forms ön işleme aşamasında işlenen kısayol tuşlarının her zaman WPF kısayol tuşlarından öncelikli olması önerilir. Örneğin, ToolStrip CTRL + s kısayol tuşu tanımlı bir denetiminiz varsa ve CTRL + s 'ye BIR WPF komutu bağlıysa, ToolStrip odağa bakılmaksızın denetim işleyicisi her zaman ilk olarak çağrılır.
-olay tarafından işlenen Windows Forms kısayol tuşları, KeyDown en son WPF içinde işlenir. Windows Forms denetiminin yöntemini geçersiz kılarak IsInputKey veya olayı işleyerek bu davranışı önleyebilirsiniz PreviewKeyDown . trueYönteminden geri dönün IsInputKey veya PreviewKeyDownEventArgs.IsInputKey özelliğinin değerini truePreviewKeyDown olay işleyicinizde olarak ayarlayın.
AcceptsReturn, AcceptsTab ve denetime özgü diğer davranış varsayılan klavye davranışını değiştiren özellikler her zamanki gibi çalışarak Windows Forms denetiminin döndürülecek yöntemi geçersiz kıldığını kabul ediyor IsInputKeytrue . olayı işleyerek varsayılan klavye davranışını değiştiren Windows Forms denetimleri KeyDown , ana bilgisayar WPF denetiminde en son işlenir. Bu denetimler en son işlendiği için, beklenmeyen davranışlar üretebilir.
Olayları girme ve bırakma Odak, içeren denetime gitmediğinden ElementHost , tek denetimde odak değiştiğinde her zamanki gibi ENTER ve Leave olayları tetiklenir WindowsFormsHost . Aşağıdaki odak değişiklikleri gerçekleştiğinde, ENTER ve Leave olayları oluşturulmaz:

-İçinden bir WindowsFormsHost denetimin dışından.
-Dışından bir WindowsFormsHost denetimin içinden.
-Denetim dışında WindowsFormsHost .
-denetimde barındırılan Windows Forms denetiminden WindowsFormsHostElementHost aynı içinde barındırılan bir denetime WindowsFormsHost .
Çoklu iş parçacığı kullanımı Tüm çoklu iş parçacığı çeşitliliği de destekler. Hem Windows Hem de WPF teknolojileri tek iş parçacıklı eşzamanlılık modeli varsaymaktadır. Hata ayıklama sırasında, diğer iş parçacıklarından çerçeve nesnelerine yapılan çağrılar, bu gereksinimi zorlamak için bir özel durum oluşturur.
Güvenlik Tüm birlikte çalışma senaryoları tam güven gerektirir. Kısmi güvende birlikte çalışma senaryolarına izin verilmez.
Erişilebilirlik Tüm erişilebilirlik senaryoları de destekler. Yardımcı teknoloji ürünleri hem Formlar hem de WPF denetimleri içeren karma uygulamalar için Windows düzgün şekilde çalışıyor. Geçerli değildir.
Pano Tüm Pano işlemleri her zamanki gibi çalışır. Bu, Formlar ve WPF denetimleri Windows kesme ve yapıştırma içerir. Geçerli değildir.
Sürükle ve bırak özelliği Tüm sürükle ve bırak işlemleri her zamanki gibi çalışır. Bu, Formlar Windows WPF denetimleri arasındaki işlemleri içerir. Geçerli değildir.

WPF Denetimlerini Windows Barındırma

Bir Windows Forms denetimi bir WPF denetimi barındırıyor olduğunda aşağıdaki birlikte çalışma senaryoları de destek almaktadır:

  • Kod kullanarak bir veya daha fazla WPF denetimi barındırma.

  • Bir özellik sayfasıyla bir veya daha fazla barındırılan WPF denetimiyle ilgili olarak.

  • Bir formda bir veya daha fazla WPF sayfası barındırma.

  • WPF penceresi başlatma.

  • Windows Forms ana ve WPF ayrıntılarına sahip bir ana/ayrıntı formu barındırma.

  • WPF ana ve üst bilgi Formlarının ayrıntılarıyla ana/Windows barındırma.

  • Özel WPF denetimlerini barındırma.

  • Karma denetimleri barındırma.

Ortam Özellikleri

Windows Forms denetimlerinin bazı çevresel özellikleri WPF eşdeğerleri içerir. Bu ortam özellikleri barındırılan WPF denetimlerine yayma ve denetimde genel özellikler olarak ortaya ElementHost çıkar. Denetim, ElementHost her bir Windows Forms ortam özelliğini WPF eşdeğerlerine çevirir.

Daha fazla bilgi için bkz. Windows Formlar ve WPF Özellik Eşlemesi.

Davranış

Aşağıdaki tabloda birlikte çalışma davranışı açıklanır.

Davranış Desteklenir Desteklenmez
Şeffaflık WPF denetimi işleme saydamlığı destekler. Forms denetiminde üst Windows arka planı, barındırılan WPF denetimlerinin arka planı olabilir. Geçerli değildir.
Çoklu iş parçacığı kullanımı Tüm çoklu iş parçacığı çeşitliliği de destekler. Hem Windows Hem de WPF teknolojileri tek iş parçacıklı eşzamanlılık modeli varsaymaktadır. Hata ayıklama sırasında, diğer iş parçacıklarından çerçeve nesnelerine yapılan çağrılar, bu gereksinimi zorlamak için bir özel durum oluşturur.
Güvenlik Tüm birlikte çalışma senaryoları tam güven gerektirir. Kısmi güvende birlikte çalışma senaryolarına izin verilmez.
Erişilebilirlik Tüm erişilebilirlik senaryoları de destekler. Yardımcı teknoloji ürünleri hem Formlar hem de WPF denetimleri içeren karma uygulamalar için Windows düzgün şekilde çalışıyor. Geçerli değildir.
Pano Tüm Pano işlemleri her zamanki gibi çalışır. Bu, Formlar ve WPF denetimleri Windows kesme ve yapıştırma içerir. Geçerli değildir.
Sürükle ve bırak özelliği Tüm sürükle ve bırak işlemleri her zamanki gibi çalışır. Bu, Formlar Windows WPF denetimleri arasındaki işlemleri içerir. Geçerli değildir.

Ayrıca bkz.