Aracılığıyla paylaş


WindowsFormsHost Öğesi için Düzen Hususları

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

WPF ve Windows Forms, form veya sayfadaki öğeleri boyutlandırmak ve konumlandırmak için farklı ama benzer mantıkları destekler. WPF'de Windows Forms denetimlerini barındıran bir karma kullanıcı arabirimi (UI) oluşturduğunuzda, WindowsFormsHost öğesi iki düzen düzenini tümleştirir.

WPF ile Windows Forms Arasındaki Düzen 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 piksel kullanılarak belirtilir. Cihazdan bağımsız bir piksel, bir inçin doksan altıda biri büyüklüğünde ve çözünürlükten bağımsızdır; bu nedenle, 72 dpi monitöre veya 19.200 dpi yazıcıya işleme yaparken benzer sonuçlar elde edersiniz.

WPF,dinamik düzenini de temel alır. Bu, ui öğesinin kendisini içeriğe, üst düzen kapsayıcısına ve kullanılabilir ekran boyutuna göre bir form veya sayfada yerleştirdiğini gösterir. Dinamik düzen, içerdiği dizelerin uzunluğu değiştiğinde kullanıcı arabirimi öğelerinin boyutunu ve konumunu otomatik olarak ayarlayarak yerelleştirmeyi kolaylaştırır.

Windows Forms'daki düzen cihaza bağımlıdır ve statik olma olasılığı daha yüksektir. Windows Forms denetimleri, donanım piksellerinde belirtilen boyutlar kullanılarak, genellikle bir form üzerinde mutlak olarak konumlandırılır. Ancak, Windows Forms aşağıdaki tabloda özetlenen bazı dinamik düzen özelliklerini destekler.

Düzen özelliği Açıklama
Otomatik Boyutlandırma Bazı Windows Forms denetimleri, içeriklerini düzgün görüntülemek 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 bkz. Control.Anchor ve Control.Dock.
Otomatik ölçeklendirme Kapsayıcı denetimleri, çıkış cihazının çözünürlüğüne veya varsayılan kapsayıcının yazı tipinin piksel cinsinden boyutuna göre kendilerini ve alt öğelerini yeniden boyutlandırır. Daha fazla bilgi için bkz. Windows Forms'de Otomatik Ölçeklendirme.
Düzen kapsayıcıları FlowLayoutPanel ve TableLayoutPanel denetimleri, alt denetimlerini düzenler ve içeriklerine göre kendilerini boyutlandırır.

Düzen Sınırlamaları

Genel olarak, Windows Forms denetimleri WPF'de mümkün olan ölçüde ölçeklendirilemez ve dönüştürülemez. Aşağıdaki listede, WindowsFormsHost öğesi barındırılan 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, denetimin yazı tipi boyutu tarafından tanımlanan tek bir yüksekliği destekler. Öğelerin dikey olarak esnetilebildiği WPF dinamik düzeninde barındırılan bir ComboBox denetimi beklendiği gibi esnemez.

  • Windows Forms denetimleri döndürülemez veya çarpıtılamaz. WindowsFormsHost öğesi, eğme veya döndürme dönüşümü uygularsanız LayoutError olayını tetikler. LayoutError olayını işlemezseniz, bir InvalidOperationException oluşturulur.

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

  • Windows Forms denetimleri, formun kendisini ve denetimlerini yazı tipi boyutuna göre otomatik olarak yeniden boyutlandıracağı 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.

Z düzeni

WPF kullanıcı arabiriminde, çakışan davranışı denetlemek için öğelerin z sırasını değiştirebilirsiniz. Barındırılmış bir Windows Forms denetimi, ayrı bir HWND içinde çizildiği için her zaman WPF öğelerinin üzerinde çizilir.

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

Düzen Davranışı

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

Ölçeklendirme, Birim Dönüştürme ve Cihaz Bağımsızlığı

WindowsFormsHost öğesi WPF ve Windows Forms boyutlarını içeren işlemler gerçekleştirildiğinde iki koordinat sistemi söz konusudur: WPF için cihazdan bağımsız pikseller ve Windows Forms için donanım pikselleri. Bu nedenle, tutarlı bir düzen elde etmek için uygun birim ve ölçeklendirme dönüştürmeleri uygulamanız gerekir.

Koordinat sistemleri arasındaki dönüştürme, geçerli cihaz çözünürlüğüne ve WindowsFormsHost öğesine veya üst öğelerine uygulanan tüm düzen veya işleme dönüşümlerine bağlıdır.

Çıkış cihazı 96 dpi ise ve WindowsFormsHost öğesine ölçeklendirme uygulanmadıysa, cihazdan bağımsız bir piksel bir donanım pikseline eşittir.

Diğer tüm durumlarda koordinat sistemi ölçeklendirmesi gerekir. Barındırılan denetim yeniden boyutlandırılmaz. Bunun yerine, WindowsFormsHost öğesi, barındırılan denetimi ve tüm alt denetimlerini ölçeklendirmeyi amaçlar. Windows Forms ölçeklendirmeyi tam olarak desteklemediğinden, WindowsFormsHost öğesi belirli denetimler tarafından desteklenen dereceye ölçeklendirilir.

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

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

Dönüştürme sorunu Açıklama
Yuvarlama WPF cihazdan bağımsız piksel boyutları doubleolarak belirtilir ve Windows Forms donanım piksel boyutları intolarak belirtilir. doubletabanlı boyutların inttabanlı boyutlara dönüştürüldüğü durumlarda, WindowsFormsHost öğesi standart yuvarlama kullanır, böylece 0,5'ten küçük kesirli değerler 0'a yuvarlanır.
Taşma WindowsFormsHost öğesi double değerlerden int değerlere dönüştürüldüğünde taşma mümkündür. MaxValue'den büyük değerler MaxValueolarak ayarlanır.

Windows Forms denetimlerinde ve WPF öğelerinde düzen davranışını denetleen özellikler, WindowsFormsHost öğesi tarafından uygun şekilde eşlenir. 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, düzen güncelleştirmelerini tetikleme amacıyla WPF'ye yayılır. InvalidateMeasure üzerindeki WindowsFormsHost yöntemi, barındırılan denetimdeki düzen değişikliklerinin WPF düzen motorunun çalışmasına neden olmasını sağlar.

Devamlı Boyutlandırılabilen Windows Forms Denetimleri

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

Boyutlandırma Algoritması

WindowsFormsHost öğesi barındırılan denetimi boyutlandırmak için aşağıdaki yordamı kullanır:

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

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

  3. ArrangeOverride yö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 göre boyutlandırılır.

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

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

  • Size özelliği 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 bakınız