WPF ve Windows Forms Birlikte Çalışması

WPF ve Windows Forms, uygulama arabirimleri oluşturmak için iki farklı mimari sunar. Ad alanı, System.Windows.Forms.Integration ortak birlikte çalışma senaryolarını etkinleştiren sınıflar sağlar. Birlikte çalışma özelliklerini uygulayan iki temel sınıf ve ElementHost'tirWindowsFormsHost. Bu konuda, hangi birlikte çalışma senaryolarının desteklendiği ve hangi senaryoların desteklenmediği açıklanmaktadır.

Dekont

Karma denetim senaryosunda özellikle dikkate alınmalıdır. Karma denetim, diğer teknolojinin denetiminde iç içe yerleştirilmiş bir teknolojiden denetime sahiptir. Buna iç içe birlikte çalışma da denir. Çok düzeyli karma denetimin birden fazla karma denetim iç içe yerleştirme düzeyi vardır. Çok düzeyli iç içe geçmiş birlikte çalışma örneği, başka bir Windows Forms denetimi içeren WPF denetimi içeren bir Windows Forms denetimidir. Çok düzeyli karma denetimler desteklenmez.

WPF'de Windows Forms Denetimlerini Barındırma

Wpf denetimi bir Windows Forms denetimini barındırdığında aşağıdaki birlikte çalışma senaryoları desteklenir:

  • WPF denetimi, XAML kullanarak bir veya daha fazla Windows Forms denetimi barındırabilir.

  • Kod kullanarak bir veya daha fazla Windows Forms denetimi barındırabilir.

  • Diğer Windows Forms denetimlerini içeren Windows Forms kapsayıcı denetimlerini barındırabilir.

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

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

  • Bir veya daha fazla ActiveX denetimi barındırabilir.

  • Bir veya daha fazla bileşik denetim barındırabilir.

  • Genişletilebilir Uygulama biçimlendirme dili (XAML) kullanarak karma denetimleri barındırabilir.

  • Kodu kullanarak karma denetimleri barındırabilir.

Düzen Desteği

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

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

  • Windows Forms denetimleri döndürülemez veya çarpıtılamaz. Örneğin, kullanıcı arabiriminizi 90 derece döndürdüğünüzde, barındırılan Windows Forms denetimleri dik konumlarını korur.

  • Çoğu durumda, Windows Forms denetimleri orantılı ölçeklendirmeyi desteklemez. Denetimin genel boyutları ölçeklendirilse de, alt denetimler ve denetimin bileşen öğeleri beklendiği gibi yeniden boyutlandırılamayabilir. Bu sınırlama, her Windows Forms denetiminin ölçeklendirmeyi ne kadar iyi desteklediğine bağlıdır.

  • WPF kullanıcı arabiriminde, çakışan 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 göre otomatik ölçeklendirmeyi destekler. WPF kullanıcı arabiriminde yazı tipi boyutunu değiştirmek düzenin tamamını yeniden boyutlandırmaz, ancak tek tek öğeler dinamik olarak yeniden boyutlandırılabilir.

Ortam Özellikleri

WPF denetimlerinin bazı ortam özellikleri Windows Forms eşdeğerlerine sahiptir. Bu ortam özellikleri barındırılan Windows Forms denetimlerine yayılır ve denetimde WindowsFormsHost genel özellikler olarak sunulur. Denetim, WindowsFormsHost her WPF ortam özelliğini Kendi Windows Forms eşdeğerine çevirir.

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

Davranış

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

Davranış Desteklenir Desteklenmez
Saydamlık Windows Forms denetim işlemesi saydamlığı destekler. Üst WPF denetiminin arka planı, barındırılan Windows Forms denetimlerinin arka planı olabilir. Bazı Windows Forms denetimleri saydamlığı desteklemez. Örneğin, TextBox VE ComboBox denetimleri WPF tarafından barındırıldığında saydam olmaz.
Sekme Barındırılan Windows Forms denetimleri için sekme sırası, bu denetimlerin Windows Forms tabanlı bir uygulamada barındırılmasıyla aynıdır.

SEKME tuşu ve SHIFT+SEKME tuşlarıyla WPF denetiminden Windows Forms denetimine sekmeyle geçiş yapmak her zamanki gibi çalışır.

Özellik değeri false olan TabStop Windows Forms denetimleri, kullanıcı denetimler arasında gezindiğinde odağı almaz.

- Her WindowsFormsHost denetimin bir TabIndex değeri vardır ve bu değer, denetimin WindowsFormsHost odağı ne zaman alacağını belirler.
- Bir WindowsFormsHost kapsayıcının içinde yer alan Windows Forms denetimleri özelliği tarafından belirtilen sırayı TabIndex izler. Son sekme dizininden sekmeleme, varsa odağı bir sonraki WPF denetimine getirir. Başka odaklanabilir WPF denetimi yoksa, sekme, sekme sırasına göre ilk Windows Forms denetimine döner.
- TabIndex içindeki denetimlerin WindowsFormsHost değerleri, denetimde WindowsFormsHost bulunan eşdüzey Windows Forms denetimlerine göre belirlenir.
- Sekme, denetime özgü davranışa saygı gösterir. Örneğin, özellik değeri true olan bir TextBoxAcceptsTab denetimde SEKME tuşuna basıldığında, odağı taşımak yerine metin kutusuna bir sekme girilir.
Uygulanamaz.
Ok tuşlarıyla gezinti - Denetimdeki WindowsFormsHost ok tuşlarıyla gezinti, sıradan bir Windows Forms kapsayıcı denetimindekiyle aynıdır: YUKARI OK ve SOL OK tuşları önceki denetimi, AŞAĞI OK ve SAĞ OK tuşları ise sonraki denetimi seçer.
- Denetimin içerdiği WindowsFormsHost ilk denetimdeki YUKARI OK ve SOL OK tuşları, SHIFT+SEKME klavye kısayoluyla aynı eylemi gerçekleştirir. Odaklanabilir bir WPF denetimi varsa, odak denetimin WindowsFormsHost dışına taşınır. Bu davranış, son denetime sarmalama gerçekleşmemesinde standart ContainerControl davranıştan farklıdır. Başka odaklanabilir WPF denetimi yoksa, odak sekme sırasına göre son Windows Forms denetimine döner.
- Denetimin içerdiği WindowsFormsHost son denetimdeki AŞAĞI OK ve SAĞ OK tuşları, SEKME tuşuyla aynı eylemi gerçekleştirir. Odaklanabilir bir WPF denetimi varsa, odak denetimin WindowsFormsHost dışına taşınır. Bu davranış, ilk denetime sarmalama yapılmaması durumundaki standart ContainerControl davranıştan farklıdır. Başka odaklanabilir WPF denetimi yoksa, odak sekme sırasına göre ilk Windows Forms denetimine döner.
Uygulanamaz.
Hızlandırıcılar Hızlandırıcılar , "Desteklenmiyor" sütununda belirtilen durumlar dışında her zamanki gibi çalışır. Teknolojiler arasında yinelenen hızlandırıcılar sıradan yinelenen hızlandırıcılar gibi çalışmaz. Bir hızlandırıcı, en az biri Windows Forms denetiminde, diğeri wpf denetiminde olmak üzere teknolojiler arasında çoğaltıldığında, Windows Forms denetimi her zaman hızlandırıcıyı alır. Yinelenen hızlandırıcıya basıldığında odak denetimler arasında geçiş yapmaz.
Kısayol tuşları Kısayol tuşları, "Desteklenmiyor" sütununda not edilenler dışında her zamanki gibi çalışır. - Ön işleme aşamasında işlenen Windows Forms kısayol tuşları her zaman WPF kısayol tuşlarının üzerinde önceliklidir. Örneğin, CTRL+S kısayol tuşları tanımlı bir ToolStrip denetiminiz varsa ve CTRL+S tuşlarına bağlı bir WPF komutu varsa, ToolStrip odak ne olursa olsun denetim işleyicisi her zaman önce çağrılır.
- Olay tarafından KeyDown işlenen Windows Forms kısayol tuşları WPF'de en son işlenir. Windows Forms denetiminin IsInputKey yöntemini geçersiz kılarak veya olayı işleyerek PreviewKeyDown bu davranışı önleyebilirsiniz. yönteminden IsInputKey dönün true veya olay işleyicinizde PreviewKeyDown özelliğinin PreviewKeyDownEventArgs.IsInputKey değerini olarak true ayarlayın.
AcceptsReturn, AcceptsTab ve denetime özgü diğer davranışlar Varsayılan klavye davranışını değiştiren özellikler, Windows Forms denetiminin yöntemini döndürecek trueşekilde geçersiz kıldığını IsInputKey varsayarak her zamanki gibi çalışır. Olayı işleyerek KeyDown varsayılan klavye davranışını değiştiren Windows Forms denetimleri, konak 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 ElementHost denetime gitmediğinde, odak tek WindowsFormsHost bir denetimde değiştiğinde Enter ve Leave olayları her zamanki gibi tetiklenir. Aşağıdaki odak değişiklikleri gerçekleştiğinde Enter ve Leave olayları tetiklenmez:

- bir denetimin içinden dışına WindowsFormsHost .
- Dışarıdan bir WindowsFormsHost denetimin içine.
- Denetimin WindowsFormsHost dışında.
- Bir denetimde barındırılan bir WindowsFormsHost Windows Forms denetiminden aynı WindowsFormsHostiçinde barındırılan bir ElementHost denetime kadar.
Çoklu kullanım Tüm çoklu iş parçacığı türleri desteklenir. Hem Windows Forms hem de WPF teknolojileri tek iş parçacıklı eşzamanlılık modeli olduğunu varsayar. Hata ayıklama sırasında, diğer iş parçacıklarından çerçeve nesnelerine yapılan çağrılar bu gereksinimi zorunlu kılmak 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 senaryosuna izin verilmez.
Erişilebilirlik Tüm erişilebilirlik senaryoları desteklenir. Yardımcı teknoloji ürünleri, hem Windows Forms hem de WPF denetimleri içeren karma uygulamalar için kullanıldığında düzgün çalışır. Uygulanamaz.
Pano Tüm Pano işlemleri her zamanki gibi çalışır. Bu, Windows Forms ve WPF denetimleri arasında kesme ve yapıştırmayı içerir. Uygulanamaz.
Sürükle ve bırak özelliği Tüm sürükle ve bırak işlemleri her zamanki gibi çalışır. Bu, Windows Forms ve WPF denetimleri arasındaki işlemleri içerir. Uygulanamaz.

Windows Forms'da WPF Denetimlerini Barındırma

Windows Forms denetimi bir WPF denetimini barındırdığında aşağıdaki birlikte çalışma senaryoları desteklenir:

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

  • Bir özellik sayfasını bir veya daha fazla barındırılan WPF denetimiyle ilişkilendirme.

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

  • WPF penceresi başlatılıyor.

  • Windows Forms ana şablonu ve WPF ayrıntılarıyla bir ana/ayrıntı formu barındırma.

  • WPF ana şablonu ve Windows Forms ayrıntılarıyla bir ana/ayrıntı formu barındırma.

  • Özel WPF denetimlerini barındırma.

  • Karma denetimleri barındırma.

Ortam Özellikleri

Windows Forms denetimlerinin bazı ortam özellikleri WPF eşdeğerlerine sahiptir. Bu ortam özellikleri barındırılan WPF denetimlerine yayılır ve denetimde ElementHost genel özellikler olarak sunulur. Denetim, ElementHost her Windows Forms ortam özelliğini WPF eşdeğerine çevirir.

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

Davranış

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

Davranış Desteklenir Desteklenmez
Saydamlık WPF denetimi işleme saydamlığı destekler. Üst Windows Forms denetiminin arka planı barındırılan WPF denetimlerinin arka planı olabilir. Uygulanamaz.
Çoklu kullanım Tüm çoklu iş parçacığı türleri desteklenir. Hem Windows Forms hem de WPF teknolojileri tek iş parçacıklı eşzamanlılık modeli olduğunu varsayar. Hata ayıklama sırasında, diğer iş parçacıklarından çerçeve nesnelerine yapılan çağrılar bu gereksinimi zorunlu kılmak 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 senaryosuna izin verilmez.
Erişilebilirlik Tüm erişilebilirlik senaryoları desteklenir. Yardımcı teknoloji ürünleri, hem Windows Forms hem de WPF denetimleri içeren karma uygulamalar için kullanıldığında düzgün çalışır. Uygulanamaz.
Pano Tüm Pano işlemleri her zamanki gibi çalışır. Bu, Windows Forms ve WPF denetimleri arasında kesme ve yapıştırmayı içerir. Uygulanamaz.
Sürükle ve bırak özelliği Tüm sürükle ve bırak işlemleri her zamanki gibi çalışır. Bu, Windows Forms ve WPF denetimleri arasındaki işlemleri içerir. Uygulanamaz.

Ayrıca bkz.