WindowsFormsHost Öğesi için Düzen Konusunda Dikkat Edilmesi Gereken Noktalar

Bu konu, WindowsFormsHost öğesinin düzen sistemiyle nasıl etkileşime gireceğini açıklar WPF .

WPF Windows Forms, bir form veya sayfadaki öğeleri boyutlandırma ve konumlandırma için farklı, ancak benzer bir mantığı destekler. İçinde Windows Forms denetimleri barındıran bir karma Kullanıcı arabirimi (UI) oluşturduğunuzda WPF , WindowsFormsHost öğesi iki düzen şemasını tümleştirir.

WPF ve Windows Forms arasındaki düzende farklılıklar

WPF çözünürlükten bağımsız düzen kullanır. Tüm WPF düzen boyutları cihazdan bağımsız pikseller kullanılarak belirtilir. Cihazdan bağımsız bir piksel, boyutun ve çözünürlükten bağımsız olarak inç bir dokun altılarından biridir, bu nedenle 72 dpi bir monitöre veya 19.200 dpi bir yazıcıda işleme yapıp olmadığına bakılmaksızın benzer sonuçlar elde edersiniz.

WPFdinamik düzene de dayalıdır. Bu, bir kullanıcı arabirimi öğesinin kendisini içeriğe, üst düzen kapsayıcısına ve kullanılabilir ekran boyutuna göre bir form veya sayfaya göre düzenler. Dinamik düzen, Kullanıcı arabirimi öğelerinin boyutunu ve konumunu, içerdikleri dizeler değişiklik uzunluğuna göre otomatik olarak ayarlayarak yerelleştirmeyi kolaylaştırır.

Windows Forms düzen cihaza bağımlıdır ve daha büyük olasılıkla statiktir. Genellikle Windows Forms denetimleri, donanım piksellerinde belirtilen boyutları kullanarak bir form üzerinde kesinlikle konumlandırılır. Ancak Windows Forms, aşağıdaki tabloda özetlenen bazı dinamik düzen özelliklerini destekler.

Düzen özelliği Description
Otomatik boyutlandırma Bazı Windows Forms denetimleri, içeriklerinin düzgün şekilde görüntülenmesini sağlamak için kendilerini yeniden boyutlandırır. Daha fazla bilgi için bkz. AutoSize özelliğine genel bakış.
Sabitleme ve yerleştirme Windows Forms denetimleri üst kapsayıcıya göre konumlandırmayı ve boyutlandırmayı destekler. Daha fazla bilgi için Control.Anchor ve Control.Dock bölümlerine bakın.
Otomatik ölçeklendirme Kapsayıcı denetimleri, çıkış cihazının çözümüne veya varsayılan kapsayıcı yazı tipinin piksel cinsinden boyutuna bağlı olarak kendilerini ve alt öğelerini yeniden boyutlandırır. Daha fazla bilgi için bkz. Windows Forms otomatik ölçeklendirme.
Düzen kapsayıcıları FlowLayoutPanelVe TableLayoutPanel denetimleri, kendi alt denetimlerini ve boyutlarını kendi içeriklerine göre düzenler.

Düzen sınırlamaları

Genel olarak, Windows Forms denetimleri ölçeklendirilmez ve içinde mümkün olan ölçüde dönüştürülemez WPF . Aşağıdaki listede, WindowsFormsHost öğesi barındırılan Windows Forms denetimini düzen sistemiyle tümleştirmeye çalıştığında oluşan bilinen sınırlamaları açıklar WPF .

  • 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. WPFÖğelerin dikey olarak uzatılabileceği dinamik bir düzende, barındırılan bir ComboBox Denetim beklenen şekilde uzatılacaktır.

  • Windows Forms denetimleri döndürülemiyor veya eğilemez. WindowsFormsHost LayoutError Bir eğme veya döndürme dönüştürmesi uygularsanız, öğesi olayı oluşturur. Olayı işlemeyin LayoutError , bir oluşturulur InvalidOperationException .

  • Ç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. Ayrıca, Windows Forms denetimlerini 0 piksel boyutuna ölçeklendiremezsiniz.

  • Windows Forms denetimler otomatik ölçeklendirmeyi destekler, bu da formun kendisini ve denetimlerini yazı tipi boyutuna göre otomatik olarak yeniden boyutlandıracaktır. 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.

Z-düzeni

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 öğelerin üzerine çizilir WPF .

Barındırılan bir Windows Forms denetimi, tüm öğelerin üzerine de çizilir Adorner .

Düzen davranışı

Aşağıdaki bölümlerde ' de Windows Forms denetimleri barındırırken düzen davranışının belirli yönleri açıklanır WPF .

Ölçeklendirme, birim dönüştürme ve cihaz bağımsızlık

Her WindowsFormsHost öğe, WPF ve Windows Forms boyutları içeren işlemler gerçekleştirdiğinde, iki koordinat sistemi vardır: cihazdan bağımsız piksel WPF ve Windows Forms için donanım pikselleri. Bu nedenle, tutarlı bir düzen elde etmek için uygun birim ve ölçekleme dönüştürmeleri uygulamanız gerekir.

Koordinat sistemleri arasında dönüştürme, geçerli cihaz çözümüne ve öğeye veya alt öğelerinden uygulanan herhangi bir düzene veya işleme dönüştürmelerine bağlıdır WindowsFormsHost .

Çıkış cihazı 96 DPI ise ve öğeye hiçbir ölçeklendirme uygulanmışsa WindowsFormsHost , cihazdan bağımsız bir piksel bir donanım pikseline eşittir.

Diğer tüm durumlar için koordinat sistemi Ölçeklendirmesi gerekir. Barındırılan denetim yeniden boyutlandırılmaz. Bunun yerine, WindowsFormsHost öğesi barındırılan denetimi ve onun tüm alt denetimlerini ölçeklendirmeye çalışır. Windows Forms ölçeklendirmeyi tamamen desteklemediğinden, WindowsFormsHost öğe belirli denetimler tarafından desteklenen dereceye ölçeklenmektedir.

ScaleChildBarındırılan Windows Forms denetimi için özel ölçeklendirme davranışı sağlamak üzere yöntemini geçersiz kılın.

Ölçeklendirmeye ek olarak, WindowsFormsHost öğesi aşağıdaki tabloda açıklandığı gibi yuvarlama ve taşma durumlarını işler.

Dönüştürme sorunu Description
Yuvarlama WPF cihazdan bağımsız piksel boyutları olarak belirtilir double ve Windows Forms donanım piksel boyutları olarak belirtilir int . Tabanlı boyutların tabanlı double boyutlara dönüştürüldüğü durumlarda int , WindowsFormsHost öğe standart yuvarlama kullanır, böylece 0,5 'den küçük kesirli değerler 0 ' a yuvarlanır.
Taşma WindowsFormsHostÖğe değerlerden değerlere dönüşdiğinde double int taşma olasılığı vardır. Değerinden büyük değerler MaxValue olarak ayarlanır MaxValue .

Windows Forms denetimleri ve öğelerinde düzen davranışını denetleyen özellikler WPF öğesi tarafından uygun şekilde eşlenir WindowsFormsHost . Daha fazla bilgi için bkz. Windows Forms ve WPF özellik eşleme.

Barındırılan denetimdeki düzen değişiklikleri

Barındırılan Windows Forms denetimindeki düzen değişiklikleri WPF tetikleyici düzeni güncelleştirmelerine dağıtılır. InvalidateMeasureÜzerindeki yöntemi, WindowsFormsHost barındırılan denetimdeki düzen değişikliklerinin, WPF Düzen altyapısının çalışmasına neden olur.

Sürekli boyutlandırılmış Windows Forms denetimleri

Sürekli ölçeklendirmeyi destekleyen Windows Forms denetimleri, düzen sistemiyle tamamen etkileşime WPF geçin. WindowsFormsHostÖğesi, MeasureOverride ArrangeOverride barındırılan Windows Forms denetimini her zamanki gibi ve düzenlemek için ve yöntemlerini kullanır.

Boyutlandırma algoritması

WindowsFormsHostÖğesi barındırılan denetimin boyutunu almak için aşağıdaki yordamı kullanır:

  1. WindowsFormsHostÖğesi MeasureOverride ve yöntemlerini geçersiz kılar ArrangeOverride .

  2. Barındırılan denetimin boyutunu belirlemekte, MeasureOverride yöntemi barındırılan denetimin GetPreferredSize yöntemini yöntemine geçirilen kısıtlamadan çevrilmiş bir kısıtlamayla çağırır MeasureOverride .

  3. ArrangeOverrideYöntemi, barındırılan denetimi verilen boyut kısıtlamasına ayarlamaya çalışır.

  4. Barındırılan denetimin Size özelliği belirtilen kısıtlamayla eşleşiyorsa, barındırılan denetim kısıtlamaya boyutlandırılır.

SizeÖzellik belirtilen kısıtlamayla eşleşmezse, barındırılan denetim sürekli boyutlandırmayı desteklemez. Örneğin, MonthCalendar Denetim yalnızca ayrı boyutlara izin verir. Bu denetim için izin verilen boyutlar, hem yükseklik hem genişlik için tamsayıların (ay sayısını temsil eder) oluşur. Bu gibi durumlarda, WindowsFormsHost öğesi aşağıdaki gibi davranır:

  • SizeÖzellik belirtilen kısıtlamadan daha büyük bir boyut döndürürse, WindowsFormsHost öğesi barındırılan denetimi kırpar. Yükseklik ve genişlik ayrı olarak işlenir, bu nedenle barındırılan denetim her iki yönde de kırpılabilir.

  • SizeÖzellik belirtilen kısıtlamadan daha küçük bir boyut döndürürse, WindowsFormsHost Bu boyut değerini kabul eder ve değeri WPF Düzen sistemine döndürür.

Ayrıca bkz.