Freigeben über


Exemplarische Vorgehensweise: Anordnen von Windows Forms-Steuerelementen in Windows Presentation Foundation

Aktualisiert: November 2007

In dieser exemplarischen Vorgehensweise wird gezeigt, wie WPF-Layoutfeatures verwendet werden, um Windows Forms-Steuerelemente in einer Hybridanwendung anzuordnen.

In dieser exemplarischen Vorgehensweise werden folgende Aufgaben veranschaulicht:

  • Erstellen des Projekts

  • Verwenden der Standardlayouteinstellungen

  • Größenanpassung an den Inhalt

  • Verwenden der absoluten Positionierung

  • Explizites Angeben der Größe

  • Festlegen von Layouteigenschaften

  • Grundlagen der Z-Reihenfolge-Einschränkungen

  • Andocken

  • Einstellen der Sichtbarkeit

  • Hosten eines Steuerelements, das nicht gestreckt wird

  • Skalieren

  • Drehen

  • Einstellen von Textabständen und Rändern

  • Verwenden von dynamischen Layoutcontainern

Eine vollständige Codeauflistung der in dieser exemplarischen Vorgehensweise veranschaulichten Aufgaben finden Sie unter Beispiel für das Anordnen von Windows Forms-Steuerelementen in Windows Presentation Foundation.

Anschließend werden Sie die Windows Forms-Layoutfeatures in WPF-basierten Anwendungen verstehen.

Tipp

Die angezeigten Dialogfelder und Menübefehle können sich je nach den aktiven Einstellungen oder der verwendeten Version von den in der Hilfe beschriebenen unterscheiden. Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:

  • Visual Studio 2008.

Erstellen des Projekts

So erstellen Sie das Projekt und richten es ein

  1. Erstellen Sie ein WPF-Anwendungsprojekt mit dem Namen WpfLayoutHostingWf.

  2. Fügen Sie im Projektmappen-Explorer einen Verweis auf die WindowsFormsIntegration-Assembly mit dem Namen WindowsFormsIntegration.dll hinzu.

  3. Fügen Sie im Projektmappen-Explorer einen Verweis auf die System.Windows.Forms-Assembly mit dem Namen System.Windows.Forms.dll hinzu. Fügen Sie außerdem einen Verweis auf die System.Drawing-Assembly mit dem Namen System.Drawing.dll hinzu.

  4. Doppelklicken Sie auf Window1.xaml, um die Datei in der XAML-Ansicht zu öffnen.

  5. Ordnen Sie am Anfang der Datei den Windows Forms-Namespace dem folgenden Code zu:

    <Window x:Class="Window1"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  
        Title="Layout Demo for Interoperability"
        >
    
    <Window x:Class="WpfLayoutHostingWfWithXaml.Window1"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  
        Title="Layout Demo for Interoperability"
        >
    
  6. Richten Sie das Standard-Grid-Element ein, indem Sie fünf Zeilen und drei Spalten erstellen.

    <Grid ShowGridLines="True">
      <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
      </Grid.RowDefinitions>
    
      <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
      </Grid.ColumnDefinitions>
    
    <Grid ShowGridLines="true">
      <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
      </Grid.RowDefinitions>
    
      <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
      </Grid.ColumnDefinitions>
    

Verwenden der Standardlayouteinstellungen

Standardmäßig behandelt das WindowsFormsHost-Element das Layout für das gehostete Windows Forms-Steuerelement.

So verwenden Sie Standardlayouteinstellungen

  1. Kopieren Sie den folgenden Code in das Grid-Element.

    <!-- Default layout. -->
    <Canvas Grid.Row="0" Grid.Column="0">
      <WindowsFormsHost Background="Yellow">
        <wf:Button Text="Windows Forms control" FlatStyle="Flat"/>
      </WindowsFormsHost>
    </Canvas>
    
    <!-- Default layout. -->
    <Canvas Grid.Row="0" Grid.Column="0">
      <WindowsFormsHost Background="Yellow">
        <wf:Button Text="Windows Forms control" FlatStyle="Flat"/>
      </WindowsFormsHost>
    </Canvas>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das Windows Forms-System.Windows.Forms.Button-Steuerelement wird im Canvas angezeigt. Die Größe des gehosteten Steuerelements basiert auf dessen Inhalt, und die Größe des WindowsFormsHost-Elements wird an das gehostete Steuerelement angepasst.

Größenanpassung an den Inhalt

Das WindowsFormsHost-Element stellt sicher, dass die Größe des gehosteten Steuerelements so angepasst wird, dass sein Inhalt ordnungsgemäß angezeigt wird.

So passen Sie die Größe an den Inhalt an

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Die Größe der zwei neuen Schaltflächen wird so angepasst, dass die längere Textzeichenfolge und der größere Schriftgrad ordnungsgemäß angezeigt werden, und die Größe der WindowsFormsHost-Elemente wird an die gehosteten Steuerelemente angepasst.

Verwenden der absoluten Positionierung

Mit der absoluten Positionierung können Sie das WindowsFormsHost-Element beliebig in der Benutzeroberfläche einfügen.

So verwenden Sie die absolute Positionierung

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das WindowsFormsHost-Element wird 20 Pixel vom oberen Rand der Rasterzelle und 20 Pixel vom linken Rand platziert.

Explizites Angeben der Größe

Sie können die Größe des WindowsFormsHost-Elements mit der Width-Eigenschaft und der Height-Eigenschaft angeben.

So geben Sie die Größe explizit an

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das WindowsFormsHost-Element wird auf eine Größe von 50 x 70 Pixel (Breite x Höhe) festgelegt und liegt damit unter den Standardlayouteinstellungen. Der Inhalt des Windows Forms-Steuerelements wird entsprechend neu angeordnet.

Festlegen von Layouteigenschaften

Legen Sie layoutbezogene Eigenschaften immer für das gehostete Steuerelement fest, und verwenden Sie dabei die Eigenschaften des WindowsFormsHost-Elements. Das Festlegen der Layouteigenschaften direkt für das gehostete Steuerelement führt zu unbeabsichtigten Ergebnissen.

Das Festlegen der layoutbezogenen Eigenschaften für das gehostete Steuerelement in XAML hat keine Auswirkungen.

So zeigen Sie die Auswirkungen des Festlegens der Eigenschaften für das gehostete Steuerelement an

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- Setting hosted control properties directly. -->
    <Canvas Grid.Row="0" Grid.Column="1">
      <WindowsFormsHost Width="160" Height="50" Background="Yellow">
        <wf:Button Name="button1" Click="button1Click" Text="Click me" FlatStyle="Flat" BackColor="Green"/>
      </WindowsFormsHost>
    </Canvas>
    
    <!-- Setting hosted control properties directly. -->
    <Canvas Grid.Row="0" Grid.Column="1">
      <WindowsFormsHost Width="160" Height="50" Background="Yellow">
        <wf:Button Name="button1" Click="button1Click" Text="Click me" FlatStyle="Flat" BackColor="Green"/>
      </WindowsFormsHost>
    </Canvas>
    
  2. Doppelklicken Sie im Projektmappen-Explorer auf Window1.xaml.cs, um die Datei im Code-Editor zu öffnen.

  3. Kopieren Sie den folgenden Code nach dem Window1()-Konstruktor in die Window1-Klassendefinition.

    Private Sub button1Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim b As System.Windows.Forms.Button = sender
    
        b.Top = 20
        b.Left = 20
    
    End Sub
    
    private void button1Click(object sender, EventArgs e )
    {
        System.Windows.Forms.Button b = sender as System.Windows.Forms.Button;
    
        b.Top = 20;
        b.Left = 20;
    }
    
  4. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen.

  5. Klicken Sie auf die Schaltfläche Hier klicken. Der button1Click-Ereignishandler legt die Top-Eigenschaft und die Left-Eigenschaft für das gehostete Steuerelement fest. Dadurch wird das gehostete Steuerelement innerhalb des WindowsFormsHost-Elements neu angeordnet. Der Host behält den gleichen Bildschirmbereich bei, das gehostete Steuerelement wird jedoch abgeschnitten. Das gehostete Steuerelement sollte jedoch immer das WindowsFormsHost-Element ausfüllen.

Grundlagen der Z-Reihenfolge-Einschränkungen

Sichtbare WindowsFormsHost-Elemente werden immer über anderen WPF-Elementen gezeichnet und durch die Z-Reihenfolge nicht beeinträchtigt.

So zeigen Sie Z-Reihenfolge-Einschränkungen an

  1. Kopieren Sie in der Datei Window1.xaml den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- Z-order demonstration. -->
    <Canvas Grid.Row="1" Grid.Column="1">
      <Label Content="A WPF label" FontSize="24"/>
      <WindowsFormsHost Canvas.Top="20" Canvas.Left="20" Background="Yellow">
        <wf:Button Text="Windows Forms control" FlatStyle="Flat"/>
      </WindowsFormsHost>
    </Canvas>
    
    <!-- Z-order demonstration. -->
    <Canvas Grid.Row="1" Grid.Column="1">
      <Label Content="A WPF label" FontSize="24"/>
      <WindowsFormsHost Canvas.Top="20" Canvas.Left="20" Background="Yellow">
        <wf:Button Text="Windows Forms control" FlatStyle="Flat"/>
      </WindowsFormsHost>
    </Canvas>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das WindowsFormsHost-Element wird über das Bezeichnungselement gezeichnet.

Andocken

Das WindowsFormsHost-Element unterstützt das Andocken von WPF. Legen Sie die angefügte Dock-Eigenschaft so fest, dass das gehostete Steuerelement in einem DockPanel-Element angedockt wird.

So docken Sie ein gehostetes Steuerelement an

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das WindowsFormsHost-Element wird an der rechten Seite des DockPanel-Elements angedockt.

Einstellen der Sichtbarkeit

Sie können das Windows Forms-Steuerelement ausblenden oder reduzieren, indem Sie die Visibility-Eigenschaft für das WindowsFormsHost-Element festlegen. Wenn ein Steuerelement nicht sichtbar ist, wird es nicht angezeigt, aber es belegt Platz im Layoutbereich. Wenn ein Steuerelement reduziert ist, wird es nicht angezeigt und belegt auch keinen Platz im Layoutbereich.

So legen Sie die Sichtbarkeit eines gehosteten Steuerelements fest

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- Setting Visibility to hidden and collapsed. -->
    <StackPanel Grid.Row="3" Grid.Column="1">
      <Button Name="button2" Click="button2Click" 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="button3Click" Content="Click to collapse" Background="OrangeRed"/>
    </StackPanel>
    
    <!-- Setting Visibility to hidden and collapsed. -->
    <StackPanel Grid.Row="3" Grid.Column="1">
      <Button Name="button2" Click="button2Click" 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="button3Click" Content="Click to collapse" Background="OrangeRed"/>
    </StackPanel>
    
  2. Doppelklicken Sie im Projektmappen-Explorer auf Window1.xaml.cs, um die Datei im Code-Editor zu öffnen.

  3. Kopieren Sie den folgenden Code in die Window1-Klassendefinition.

    Private Sub button2Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Me.host1.Visibility = Windows.Visibility.Hidden
    End Sub
    
    
    Private Sub button3Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Me.host1.Visibility = Windows.Visibility.Collapsed
    End Sub
    
    private void button2Click(object sender, EventArgs e)
    {
        this.host1.Visibility = Visibility.Hidden;
    }
    
    private void button3Click(object sender, EventArgs e)
    {
        this.host1.Visibility = Visibility.Collapsed;
    }
    
  4. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen.

  5. Klicken Sie auf die Schaltfläche Zum Ausblenden klicken, um das WindowsFormsHost-Element auszublenden.

  6. Klicken Sie auf die Schaltfläche Zum Reduzieren klicken, um das WindowsFormsHost-Element vollständig im Layout auszublenden. Wenn das Windows Forms-Steuerelement reduziert ist, werden die umgebenden Elemente neu angeordnet, um dessen Bereich einzunehmen.

Hosten eines Steuerelements, das nicht gestreckt wird

Einige Windows Forms-Steuerelemente haben eine feste Größe und können nicht gestreckt werden, um den verfügbaren Bereich im Layout auszufüllen. Das MonthCalendar-Steuerelement zeigt beispielsweise einen Monat in einem festen Bereich an.

So hosten Sie ein Steuerelement, das nicht gestreckt wird

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das WindowsFormsHost-Element wird in der Rasterzeile zentriert. Es wird jedoch nicht gestreckt, um den verfügbaren Bereich auszufüllen. Wenn das Fenster groß genug ist, werden möglicherweise zwei oder mehr Monate vom gehosteten MonthCalendar-Steuerelement angezeigt, die jedoch in der Zeile zentriert sind. Das WPF-Layoutmodul zentriert Elemente, deren Größe nicht angepasst werden kann, um den verfügbaren Bereich auszufüllen.

Skalieren

Im Gegensatz zu WPF-Elementen sind die meisten Windows Forms-Steuerelemente nicht kontinuierlich skalierbar. Wenn möglich, skaliert das WindowsFormsHost-Element sein gehostetes Steuerelement.

So skalieren Sie ein gehostetes Steuerelement

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das gehostete Steuerelement und die umgebenden Elemente werden um den Faktor 0,5 skaliert. Die Schriftart des gehosteten Steuerelements wird jedoch nicht skaliert.

Drehen

Im Gegensatz zu WPF-Elementen unterstützen Windows Forms-Steuerelemente keine Drehung. Das WindowsFormsHost-Element dreht nicht mit anderen WPF-Elementen, wenn eine Drehungstransformation angewendet wird. Jeder andere Drehungswert als 180 Grad löst das LayoutError-Ereignis aus.

So zeigen Sie die Auswirkung der Drehung in einer Hybridanwendung an

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das gehostete Steuerelement wird nicht gedreht. Die umgebenden Elemente werden jedoch um 180 Grad gedreht.

Einstellen von Textabständen und Rändern

Textabstände und Ränder im WPF-Layout sind mit den Textabständen und Rändern in Windows Forms vergleichbar. Legen Sie einfach die Padding-Eigenschaft und die Margin-Eigenschaft für das WindowsFormsHost-Element fest.

So legen Sie Textabstände und Ränder für ein gehostetes Steuerelement fest

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- 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>
    
    <!-- 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>
    
  2. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Die Einstellungen für Textabstände und Ränder werden wie in Windows Forms auf die gehosteten Windows Forms-Steuerelemente angewendet.

Verwenden von dynamischen Layoutcontainern

Windows Forms stellt zwei dynamische Layoutcontainer, FlowLayoutPanel und TableLayoutPanel, zur Verfügung. Sie können diese Container auch in WPF-Layouts verwenden.

So verwenden Sie einen dynamischen Layoutcontainer

  1. Kopieren Sie den folgenden Code nach dem vorherigen Codebeispiel in das Grid-Element.

    <!-- Flow layout. -->
    <DockPanel Grid.Row="4" Grid.Column="2">
      <WindowsFormsHost Name="flowLayoutHost" Background="Yellow">
        <wf:FlowLayoutPanel/>
      </WindowsFormsHost>
    </DockPanel>
    
    <!-- Flow layout. -->
    <DockPanel Grid.Row="4" Grid.Column="2">
      <WindowsFormsHost Name="flowLayoutHost" Background="Yellow">
        <wf:FlowLayoutPanel/>
      </WindowsFormsHost>
    </DockPanel>
    
  2. Doppelklicken Sie im Projektmappen-Explorer auf Window1.xaml.cs, um die Datei im Code-Editor zu öffnen.

  3. Kopieren Sie den folgenden Code in die Window1-Klassendefinition.

    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 Sub
    
    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);
        }
    }
    
  4. Fügen Sie dem Konstruktor einen Aufruf der InitializeFlowLayoutPanel-Methode hinzu.

    Public Sub New()
        InitializeComponent()
    
        Me.InitializeFlowLayoutPanel()
    
    End Sub
    
    public Window1()
    {
        InitializeComponent();
    
        this.InitializeFlowLayoutPanel();
    }
    
  5. Drücken Sie F5, um die Anwendung zu erstellen und auszuführen. Das WindowsFormsHost-Element füllt DockPanel aus, und FlowLayoutPanel ordnet seine untergeordneten Steuerelemente in der Standard-FlowDirection an.

Siehe auch

Aufgaben

Beispiel für das Anordnen von Windows Forms-Steuerelementen in Windows Presentation Foundation

Konzepte

Überlegungen zum Layout für das WindowsFormsHost-Element

Exemplarische Vorgehensweise: Hosten eines zusammengesetzten Windows Forms-Steuerelements in Windows Presentation Foundation

Exemplarische Vorgehensweise: Hosten eines Windows Presentation Foundation-Steuerelements in Windows Forms

Referenz

ElementHost

WindowsFormsHost

Weitere Ressourcen

WPF-Designer

Gewusst-wie-Themen zu Migration und Interoperabilität