Partilhar via


Demonstra Passo a passo: Organizando controles Windows Forms no Windows Presentation Foundation

Essa explicação passo a passo mostra como usar recursos de layout do WPF para organizar controles de Windows Forms em um aplicativo híbrido.

Tarefas ilustradas nesta explicação passo a passo incluem:

  • Criando o projeto

  • Usando as configurações padrão de layout.

  • Redimensionando para adequar-se ao conteúdo.

  • Usando o posicionamento absoluto.

  • Especificando o tamanho explicitamente.

  • Definindo propriedades de layout.

  • Noções básicas sobre limitações da ordem z.

  • Encaixe.

  • Definindo a visibilidade.

  • Hospedando um controle que não se alonga.

  • Aplicando escalas.

  • Rotacionando.

  • Definindo o enchimento e as margens.

  • Usando contêineres de layout dinâmico.

For a complete code listing of the tasks illustrated in this walkthrough, see Organizando controles de formulários do Windows no Windows Presentation Foundation Exemplo.

Quando você terminar, você terá terá conhecimento sobre os recursos de layout de Windows Forms em aplicativos baseados no WPF.

ObservaçãoObservação:

As caixas de diálogo e comandos de menu que você vê podem diferir das descritas no Help, dependendo de suas configurações ativas ou de edição. Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu. Para obter mais informações, consulte Configurações do Visual Studio.

Pré-requisitos

Para completar este passo a passo, são necessários os seguintes componentes:

  • Visual Studio 2008.

Criando o projeto

Para criar e configurar o projeto

  1. Crie um projeto de aplicativo WPF chamado WpfLayoutHostingWf.

  2. No Solution Explorer, acrescente uma referência ao assembly WindowsFormsIntegration, que é chamado WindowsFormsIntegration.dll.

  3. No gerenciador de soluções, adicione uma referência ao assembly sistema.Windows.Forms, denominado sistema.Windows.Forms.dll. Também adicione uma referência ao assembly sistema.desenho, que é chamado sistema.desenho.dll.

  4. Clique duas vezes em Window1.xaml para abri-lo no modo XAML.

  5. No início do arquivo, mapeie o namespace Windows Forms com o código a seguir.

    <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. Configure o elemento Grid padrão criando cinco linhas e três colunas.

    <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>
    

Usando as configurações padrão de layout

Por padrão, o elemento WindowsFormsHost cuida do layout para o controle Windows Forms hospedado.

Para usar as configurações padrão de layout

  1. Copie o seguinte código para o elemento Grid.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O controle Windows Forms System.Windows.Forms.Button aparece no Canvas. O controle hospedado é dimensionado com base no seu conteúdo, e o elemento WindowsFormsHost é dimensionado para acomodar o controle hospedado.

Sizing to Content

O elemento WindowsFormsHost garante que o controle hospedado é dimensionado para exibir seu conteúdo corretamente.

Para redimensionar-se adequando-se ao conteúdo

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. Os dois novos controles de botão são dimensionados para exibir a sequência mais longa de texto e maior tamanho da fonte corretamente, e os elementos WindowsFormsHost são redimensionados para acomodar os controles hospedados.

Usando o posicionamento absoluto

Você pode usar posicionamento absoluto para colocar o elemento WindowsFormsHost em qualquer lugar da interface do usuário.

Para usar posicionamento absoluto

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O elemento WindowsFormsHost é colocado a 20 pixels do topo da célula da grade e a 20 pixels do seu lado esquerdo.

Especificando o tamanho explicitamente

Você pode especificar o tamanho do elemento WindowsFormsHost usando as propriedades Width e Height.

Para especificar o tamanho explicitamente

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O elemento WindowsFormsHost tem seu tamanho definido como 50 pixels de largura por 70 pixels de altura, que é menor do que as configurações padrão de layout. O conteúdo do controle Windows Forms é reorganizado adequadamente.

Definindo propriedades de layout

Defina sempre propriedades relacionados ao layout no controle hospedado utilizando as propriedades do elemento WindowsFormsHost. A definição de propriedades de layout diretamente no controle hospedado produzirá resultados indesejados.

A definição de propriedades relacionadas ao layout no controle hospedado em XAML não surte efeito.

Para ver os efeitos da definição das propriedades no controle hospedado

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. No Solution Explorer, clique duas vezes sobre Window1.xaml.cs para abri-lo no Editor de Código.

  3. Copie o código a seguir para a definição da classe Window1, após o contrutor Window1().

    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. Pressione F5 para criar e executar o aplicativo.

  5. Clique no botão Click me. O tratador de eventos button1Click define as propriedades Top e Left do controle hospedado. Isso faz com que o controle hospedado seja reposicionado dentro do elemento WindowsFormsHost. O host mantém a mesma área da tela, mas o controle hospedado está cortado. Em vez disso, o controle hospedado sempre deve preencher o elemento WindowsFormsHost.

Noções básicas sobre limitações da ordem z

Elementos WindowsFormsHost visíveis sempre são desenhados por cima de outros elementos WPF, e eles não são afetados pela ordem z.

Para ver as limitações da ordem z

  1. No arquivo Window1.xaml, copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O elemento WindowsFormsHost é pintado sobre o elemento de rótulo.

Encaixe

Os elementos WindowsFormsHost oferecem suporte ao encaixe de WPF. Defina a propriedade anexada Dock para encaixar o controle hospedado em um elemento DockPanel.

Para encaixar um controle hospedado

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O elemento WindowsFormsHost está encaixado à direita do elemento DockPanel.

Definindo a visibilidade

Você pode tornar o seu controle Windows Forms invisível ou recolhê-lo definindo a propriedade Visibility no elemento WindowsFormsHost. Quando um controle estiver invisível, ele não será exibido, mas ele ocupará espaço de layout. Quando um controle estiver recolhido, ele não será exibido nem ocupará espaço de layout.

Para definir a visibilidade de um controle hospedado

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. No Solution Explorer, clique duas vezes sobre Window1.xaml.cs para abri-lo no Editor de Código.

  3. Copie o seguinte código na definição da classe Window1.

    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. Pressione F5 para criar e executar o aplicativo.

  5. Clique no botão Click to make invisible para tornar o elemento WindowsFormsHost invisível.

  6. Clique no botão Click to collapse para ocultar totalmente o elemento WindowsFormsHost. Quando o controle Windows Forms estiver recolhido, os elementos adjacentes serão reorganizados para ocupar o seu espaço.

Hospedando um controle que não se alonga

Alguns controles Windows Forms têm um tamanho fixo e não se alongam para preencher o espaço disponível no layout. Por exemplo, o controle MonthCalendar exibe um mês em um espaço fixo.

Para hospedar um controle que não se alonga

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O elemento WindowsFormsHost é centralizado na linha de grade, mas ele não é estendido para preencher o espaço disponível. Se a janela for grande o suficiente, você pode ver dois ou mais meses exibidos pelo controle MonthCalendar hospedado, mas eles são centralizados na linha. O mecanismo de layout WPF centraliza os elementos que não podem ser dimensionados para preencher o espaço disponível.

Dimensionamento

Ao contrário dos elementos WPF, a maioria dos controle Windows Forms não podem sofrer uma aplicação de escala contínua. O elemento WindowsFormsHost aplica uma escala em seu controle hospedado quando possível.

Para aplicar uma escala em um controle hospedado

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O controle hospedado e seus elementos adjacentes sofrem uma escala com um fator de 0,5. No entanto, a fonte do controle hospedado não é redimensionada.

Rotacionando

Ao contrário dos elementos WPF, controles Windows Forms não oferecem suporte a rotação. O elemento WindowsFormsHost não gira com outros elementos WPF quando uma transformação de rotação é aplicada. Qualquer valor de rotação diferente de 180 graus gera o evento LayoutError.

Para ver o efeito de rotação em um aplicativo híbrido

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. O controle hospedado não é girado, mas seus elementos adjacentes são girados por um ângulo de 180 graus.

Definindo o enchimento e as margens

Enchimento e margens no layout do WPF são semelhantes a enchimento e margens em Windows Forms. Basta definir as propriedades Padding e Margin no elemento WindowsFormsHost.

Para definir o enchimento e as margens para um controle hospedado

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. Pressione F5 para criar e executar o aplicativo. As configurações de enchimento e margem são aplicadas aos controles Windows Forms hospedados da mesma forma que seriam aplicadas em Windows Forms.

Usando contêineres de layout dinâmico

Windows Forms fornece dois contêineres de layout dinâmico, FlowLayoutPanel e TableLayoutPanel. Você também pode usar esses recipientes nos layouts WPF.

Para usar um contêiner de layout dinâmico

  1. Copie o seguinte código para o elemento Grid, após o exemplo de código anterior.

    <!-- 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. No Solution Explorer, clique duas vezes sobre Window1.xaml.cs para abri-lo no Editor de Código.

  3. Copie o seguinte código na definição da classe Window1.

    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. Adicione uma chamada para o método InitializeFlowLayoutPanel no construtor.

    Public Sub New()
        InitializeComponent()
    
        Me.InitializeFlowLayoutPanel()
    
    End Sub
    
    public Window1()
    {
        InitializeComponent();
    
        this.InitializeFlowLayoutPanel();
    }
    
  5. Pressione F5 para criar e executar o aplicativo. O elemento WindowsFormsHost preenche o DockPanel, e FlowLayoutPanel organiza seus controles-filho na FlowDirection padrão.

Consulte também

Tarefas

Organizando controles de formulários do Windows no Windows Presentation Foundation Exemplo

Conceitos

Considerações sobre layout para o elemento WindowsFormsHost

Demonstra Passo a passo: Hospedagem de um controle composto do Windows Forms no Windows Presentation Foundation

Demonstra Passo a passo: Hospedagem de um controle Windows Presentation Foundation no Windows Forms

Referência

ElementHost

WindowsFormsHost

Outros recursos

WPF Designer

Tópicos de "Como Fazer" migração e interoperabilidade