Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuzda, karma bir uygulamada Windows Forms denetimlerini düzenlemek için WPF düzen özelliklerinin nasıl kullanılacağı gösterilmektedir.
Bu kılavuzda gösterilen görevler şunlardır:
- Projeyi oluşturma.
- Varsayılan düzen ayarlarını kullanma.
- İçeriğe göre boyutlandırma.
- Mutlak konumlandırmayı kullanma.
- Boyutu açıkça belirtme.
- Düzen özelliklerini ayarlama.
- Z düzeni sınırlamalarını anlama.
- Kenetlenme.
- Görünürlüğü ayarlama.
- Genişlemeyen bir denetimi barındırma.
- Ölçekleme.
- Dönen.
- Doldurma ve kenar boşluklarını ayarlama.
- Dinamik düzen kapsayıcılarını kullanma.
Bu kılavuzda gösterilen görevlerin tam kod listesi için bkz. WPF'de Windows Forms Denetimlerini Düzenleme Örnek.
İşiniz bittiğinde, WPF tabanlı uygulamalarda Windows Forms düzen özelliklerini anlayacaksınız.
Önkoşullar
Bu kılavuzu tamamlamak için Visual Studio'ya ihtiyacınız vardır.
Projeyi Oluşturma
Projeyi oluşturmak ve ayarlamak için şu adımları izleyin:
WpfLayoutHostingWfadlı bir WPF Uygulaması projesi oluşturun.Çözüm Gezgini'nde aşağıdaki derlemelere başvurular ekleyin:
- WindowsFormsIntegration
- System.Windows.Forms
- System.Drawing
MainWindow.xaml
çift tıklayarak XAML görünümünde açın. Window öğesinde aşağıdaki Windows Forms ad alanı eşlemesini ekleyin.
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"Grid öğesinde ShowGridLines özelliğini
trueolarak ayarlayın ve beş satır ve üç sütun tanımlayın.<Grid ShowGridLines="true"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions>
Varsayılan Düzen Ayarlarını Kullanma
Varsayılan olarak, WindowsFormsHost öğesi barındırılan Windows Forms denetiminin düzenini işler.
Varsayılan düzen ayarlarını kullanmak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Default layout. --> <Canvas Grid.Row="0" Grid.Column="0"> <WindowsFormsHost Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> </Canvas>Uygulamayı derlemek ve çalıştırmak için F5 basın. Windows Forms System.Windows.Forms.Button denetimi Canvasiçinde görünür. Barındırılan denetim içeriğine göre boyutlandırılır ve WindowsFormsHost öğesi barındırılan denetimi barındıracak şekilde boyutlandırılır.
İçeriğe Göre Boyutlandırma
WindowsFormsHost öğesi, barındırılan denetimin içeriğini düzgün görüntüleyecek şekilde boyutlandırılmasını sağlar.
İçeriği boyutlandırmak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Sizing to content. --> <Canvas Grid.Row="1" Grid.Column="0"> <WindowsFormsHost Background="Orange"> <wf:Button Text="Windows Forms control with more content" FlatStyle="Flat"/> </WindowsFormsHost> </Canvas> <Canvas Grid.Row="2" Grid.Column="0"> <WindowsFormsHost FontSize="24" Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> </Canvas>Uygulamayı derlemek ve çalıştırmak için F5 basın. İki yeni düğme denetimi, daha uzun metin dizesini ve daha büyük yazı tipi boyutunu düzgün görüntüleyecek şekilde boyutlandırılır ve WindowsFormsHost öğeleri barındırılan denetimlere uyacak şekilde yeniden boyutlandırılır.
Mutlak Konumlandırmayı Kullanma
WindowsFormsHost öğesini kullanıcı arabiriminde (UI) herhangi bir yere yerleştirmek için mutlak konumlandırmayı kullanabilirsiniz.
Mutlak konumlandırmayı kullanmak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Absolute positioning. --> <Canvas Grid.Row="3" Grid.Column="0"> <WindowsFormsHost Canvas.Top="20" Canvas.Left="20" Background="Yellow"> <wf:Button Text="Windows Forms control with absolute positioning" FlatStyle="Flat"/> </WindowsFormsHost> </Canvas>Uygulamayı derlemek ve çalıştırmak için F5 basın. WindowsFormsHost öğesi, kılavuz hücresinin üst kenarından 20 piksel ve sol kenarından 20 piksel uzağa yerleştirilmiştir.
Boyutu Açıkça Belirtme
WindowsFormsHost ve Width özelliklerini kullanarak Height öğesinin boyutunu belirtebilirsiniz.
Boyutu açıkça belirtmek için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Explicit sizing. --> <Canvas Grid.Row="4" Grid.Column="0"> <WindowsFormsHost Width="50" Height="70" Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> </Canvas>Uygulamayı derlemek ve çalıştırmak için F5 basın. WindowsFormsHost öğesi, varsayılan düzen ayarlarından daha küçük olan 50 piksel genişliğinde ve 70 piksel yüksekliğinde bir boyuta ayarlanır. Windows Forms denetiminin içeriği uygun şekilde yeniden düzenlenir.
Düzen Özelliklerini Ayarlama
her zaman WindowsFormsHost öğesinin özelliklerini kullanarak barındırılan denetimde düzen ile ilgili özellikleri ayarlayın. Düzen özelliklerini doğrudan barındırılan denetimde ayarlamak istenmeyen sonuçlar verir.
XAML'de barındırılan denetimde düzen ile ilgili özellikleri ayarlamanın hiçbir etkisi yoktur.
Barındırılan denetimde özellikleri ayarlamanın etkilerini görmek için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Setting hosted control properties directly. --> <Canvas Grid.Row="0" Grid.Column="1"> <WindowsFormsHost Width="160" Height="50" Background="Yellow"> <wf:Button Name="button1" Click="button1_Click" Text="Click me" FlatStyle="Flat" BackColor="Green"/> </WindowsFormsHost> </Canvas>Çözüm GezginiMainWindow.xaml.vb veya MainWindow.xaml.cs çift tıklayarak Kod Düzenleyicisi'nde açın.
Aşağıdaki kodu
MainWindowsınıf tanımına kopyalayın:private void button1_Click(object sender, EventArgs e ) { System.Windows.Forms.Button b = sender as System.Windows.Forms.Button; b.Top = 20; b.Left = 20; }Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Dim b As System.Windows.Forms.Button = sender b.Top = 20 b.Left = 20 End SubUygulamayı derlemek ve çalıştırmak için F5 basın.
Bana tıklayın düğmesine basın.
button1_Clickolay işleyicisi barındırılan denetimde Top ve Left özelliklerini ayarlar. Bu, barındırılan denetimin WindowsFormsHost öğesi içinde yeniden konumlandırılmasına neden olur. Ana bilgisayar aynı ekran alanını korur, ancak barındırılan denetim kesilir. Bunun yerine, barındırılan denetim her zaman WindowsFormsHost öğesini doldurmalıdır.
Z Düzeni Sınırlamalarını Anlama
Görünür WindowsFormsHost öğeleri her zaman diğer WPF öğelerinin üzerine çizilir ve z düzeninden etkilenmez. Bu z sırası davranışını görmek için aşağıdakileri yapın:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Z-order demonstration. --> <Canvas Grid.Row="1" Grid.Column="1"> <WindowsFormsHost Canvas.Top="20" Canvas.Left="20" Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> <Label Content="A WPF label" FontSize="24"/> </Canvas>Uygulamayı derlemek ve çalıştırmak için F5 basın. WindowsFormsHost öğesi etiket öğesinin üzerine boyanmış.
Kenetlenme
WindowsFormsHost öğesi WPF dock işlemini destekler. Barındırılan denetimi bir Dock öğesine yerleştirmesi için ekli DockPanel özelliğini ayarlayın.
Barındırılan denetimi takmak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Docking a WindowsFormsHost element. --> <DockPanel LastChildFill="false" Grid.Row="2" Grid.Column="1"> <WindowsFormsHost DockPanel.Dock="Right" Canvas.Top="20" Canvas.Left="20" Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> </DockPanel>Uygulamayı derlemek ve çalıştırmak için F5 basın. WindowsFormsHost öğesi, DockPanel öğesinin sağ tarafına yerleştirilmiştir.
Görünürlüğü Ayarlama
Windows Forms denetiminizi görünmez hale getirebilir veya Visibility öğesinde WindowsFormsHost özelliğini ayarlayarak çökertebilirsiniz. Bir denetim görünmez olduğunda görüntülenmez, ancak düzen alanını kaplar. Denetim daraltıldığında görüntülenmez ve düzen alanı kaplamaz.
Barındırılan denetimin görünürlüğünü ayarlamak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Setting Visibility to hidden and collapsed. --> <StackPanel Grid.Row="3" Grid.Column="1"> <Button Name="button2" Click="button2_Click" Content="Click to make invisible" Background="OrangeRed"/> <WindowsFormsHost Name="host1" Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> <Button Name="button3" Click="button3_Click" Content="Click to collapse" Background="OrangeRed"/> </StackPanel>MainWindow.xaml.vb veya MainWindow.xaml.csaşağıdaki kodu sınıf tanımına kopyalayın:
private void button2_Click(object sender, EventArgs e) { this.host1.Visibility = Visibility.Hidden; } private void button3_Click(object sender, EventArgs e) { this.host1.Visibility = Visibility.Collapsed; }Private Sub button2_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Me.host1.Visibility = Windows.Visibility.Hidden End Sub Private Sub button3_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Me.host1.Visibility = Windows.Visibility.Collapsed End SubUygulamayı derlemek ve çalıştırmak için F5 basın.
öğesini görünmez yapmak için WindowsFormsHost düğmesine tıklayın.
Gizle düğmesine basın. Windows Forms denetimi daraltıldığında, çevresindeki öğeler boşluğu doldurmak için yeniden düzenlenir.
Esnetmeyen bir kontrol öğesini barındırmak
Bazı Windows Forms denetimleri sabit bir boyuta sahiptir ve düzendeki kullanılabilir alanı doldurmak için esnetilmemiştir. Örneğin, MonthCalendar denetimi sabit bir alanda bir ay görüntüler.
Esnemeyen bir denetim öğesini barındırmak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Hosting a control that does not stretch. --> <!-- The MonthCalendar has a discrete size. --> <StackPanel Grid.Row="4" Grid.Column="1"> <Label Content="A WPF element" Background="OrangeRed"/> <WindowsFormsHost Background="Yellow"> <wf:MonthCalendar/> </WindowsFormsHost> <Label Content="Another WPF element" Background="OrangeRed"/> </StackPanel>Uygulamayı derlemek ve çalıştırmak için F5 basın. WindowsFormsHost öğesi kılavuz satırında ortalanır, ancak kullanılabilir alanı doldurmak için genişletilmez. Pencere yeterince büyükse, barındırılan MonthCalendar denetimi tarafından görüntülenen iki veya daha fazla ayı görebilirsiniz; ancak bu aylar satırda ortalanmıştır. WPF yerleşim motoru, kullanılabilir alanı dolduramayacak şekilde boyutlandırılamayan öğeleri ortalar.
Ölçeklendirme
WPF öğelerinin aksine, çoğu Windows Forms denetimi sürekli olarak ölçeklenebilir değildir. Özel ölçeklendirme sağlamak için WindowsFormsHost.ScaleChild yöntemini geçersiz kılarsınız.
Barındırılan denetimi varsayılan davranışı kullanarak ölçeklendirmek için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Scaling transformation. --> <StackPanel Grid.Row="0" Grid.Column="2"> <StackPanel.RenderTransform> <ScaleTransform CenterX="0" CenterY="0" ScaleX="0.5" ScaleY="0.5" /> </StackPanel.RenderTransform> <Label Content="A WPF UIElement" Background="OrangeRed"/> <WindowsFormsHost Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> <Label Content="Another WPF UIElement" Background="OrangeRed"/> </StackPanel>Uygulamayı derlemek ve çalıştırmak için F5 basın. Barındırılan denetim ve çevresindeki öğeler 0,5 faktörüne göre ölçeklendirilir. Ancak barındırılan kontrolün yazı tipi ölçeklendirilmiyor.
Dönen
WPF öğelerinin aksine, Windows Forms denetimleri döndürmeyi desteklemez. Döndürme dönüşümü uygulandığında, WindowsFormsHost öğesi diğer WPF öğeleriyle birlikte dönmez. 180 derece dışındaki döndürme değerleri LayoutError olayını yükseltir.
Karma uygulamada döndürmenin etkisini görmek için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Rotation transformation. --> <StackPanel Grid.Row="1" Grid.Column="2"> <StackPanel.RenderTransform> <RotateTransform CenterX="200" CenterY="50" Angle="180" /> </StackPanel.RenderTransform> <Label Content="A WPF element" Background="OrangeRed"/> <WindowsFormsHost Background="Yellow"> <wf:Button Text="Windows Forms control" FlatStyle="Flat"/> </WindowsFormsHost> <Label Content="Another WPF element" Background="OrangeRed"/> </StackPanel>Uygulamayı derlemek ve çalıştırmak için F5 basın. Barındırılan denetim döndürülmez, ancak çevresindeki öğeler 180 derecelik bir açıyla döndürülür. Öğeleri görmek için pencereyi yeniden boyutlandırmanız gerekebilir.
Doldurma ve Kenar Boşluklarını Ayarlama
WPF düzenindeki doldurma ve kenar boşlukları, Windows Forms'daki doldurma ve kenar boşluklarına benzer. Padding öğesinde Margin ve WindowsFormsHost özelliklerini ayarlamanız yeterlidir.
Barındırılan denetim için iç boşluk ve kenar boşluklarını ayarlamak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Padding. --> <Canvas Grid.Row="2" Grid.Column="2"> <WindowsFormsHost Padding="0, 20, 0, 0" Background="Yellow"> <wf:Button Text="Windows Forms control with padding" FlatStyle="Flat"/> </WindowsFormsHost> </Canvas><!-- Margin. --> <Canvas Grid.Row="3" Grid.Column="2"> <WindowsFormsHost Margin="20, 20, 0, 0" Background="Yellow"> <wf:Button Text="Windows Forms control with margin" FlatStyle="Flat"/> </WindowsFormsHost> </Canvas>Uygulamayı derlemek ve çalıştırmak için F5 basın. Doldurma ve kenar boşluğu ayarları, barındırılan Windows Forms denetimlerine, Windows Forms'da uygulandıkları şekilde uygulanır.
Dinamik Düzen Kapsayıcılarını Kullanma
Windows Forms, FlowLayoutPanel ve TableLayoutPaneliki dinamik düzen kapsayıcısı sağlar. Bu kapsayıcıları WPF düzenlerinde de kullanabilirsiniz.
Dinamik düzen kapsayıcısı kullanmak için şu adımları izleyin:
Aşağıdaki XAML'yi Grid öğesine kopyalayın:
<!-- Flow layout. --> <DockPanel Grid.Row="4" Grid.Column="2"> <WindowsFormsHost Name="flowLayoutHost" Background="Yellow"> <wf:FlowLayoutPanel/> </WindowsFormsHost> </DockPanel>MainWindow.xaml.vb veya MainWindow.xaml.csaşağıdaki kodu sınıf tanımına kopyalayın:
private void InitializeFlowLayoutPanel() { System.Windows.Forms.FlowLayoutPanel flp = this.flowLayoutHost.Child as System.Windows.Forms.FlowLayoutPanel; flp.WrapContents = true; const int numButtons = 6; for (int i = 0; i < numButtons; i++) { System.Windows.Forms.Button b = new System.Windows.Forms.Button(); b.Text = "Button"; b.BackColor = System.Drawing.Color.AliceBlue; b.FlatStyle = System.Windows.Forms.FlatStyle.Flat; flp.Controls.Add(b); } }Private Sub InitializeFlowLayoutPanel() Dim flp As System.Windows.Forms.FlowLayoutPanel = Me.flowLayoutHost.Child flp.WrapContents = True Const numButtons As Integer = 6 Dim i As Integer For i = 0 To numButtons Dim b As New System.Windows.Forms.Button() b.Text = "Button" b.BackColor = System.Drawing.Color.AliceBlue b.FlatStyle = System.Windows.Forms.FlatStyle.Flat flp.Controls.Add(b) Next i End SubOluşturucuda
InitializeFlowLayoutPanelyöntemine bir çağrı ekleyin:public MainWindow() { InitializeComponent(); this.InitializeFlowLayoutPanel(); }Public Sub New() InitializeComponent() Me.InitializeFlowLayoutPanel() End SubUygulamayı derlemek ve çalıştırmak için F5 basın. WindowsFormsHost öğesi DockPanel'i doldurur ve FlowLayoutPanel alt denetimlerini varsayılan FlowDirectiondüzenler.
Ayrıca bakınız
- ElementHost
- WindowsFormsHost
- Visual Studio'da XAML'i Tasarlayın
- WindowsFormsHost Öğesi için Düzen Dikkate Alınması Gerekenler
- WPF Örnek'inde Windows Forms Denetimlerini Düzenleme
- Adım Adım Kılavuz: WPF'te Windows Forms Bileşik Denetimini Barındırma
- Adım Adım Kılavuz: Windows Forms'ta WPF Bileşik Denetimi Barındırma
.NET Desktop feedback