Condividi tramite


Procedura dettagliata: disposizione di controlli Windows Form in Windows Presentation Foundation

Aggiornamento: novembre 2007

In questa procedura dettagliata viene illustrato come utilizzare le funzionalità di layout di WPF per disporre controlli Windows Form in un'applicazione ibrida.

Di seguito vengono elencate le attività illustrate nella procedura dettagliata:

  • Creazione del progetto.

  • Utilizzo delle impostazioni di layout predefinite.

  • Ridimensionamento in base al contenuto.

  • Utilizzo delle posizioni assolute.

  • Specifica esplicita delle dimensioni.

  • Impostazione delle proprietà di layout.

  • Informazioni sulle limitazioni dell'ordine Z.

  • Ancoraggio.

  • Impostazione della visibilità.

  • Hosting di un controllo che non si adatta.

  • Ridimensionamento.

  • Rotazione.

  • Impostazione della spaziatura interna e dei margini.

  • Utilizzo di contenitori di layout dinamici.

Per un elenco di codice completo delle attività illustrate in questa procedura dettagliata, vedere Esempio di disposizione di controlli Windows Form in Windows Presentation Foundation.

Questa procedura consente di approfondire le funzionalità di layout di Windows Form nelle applicazioni basate su WPF.

Nota

Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea in quanto dipendono dall'edizione o dalle impostazioni in uso. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei seguenti componenti:

  • Visual Studio 2008.

Creazione del progetto

Per creare e configurare il progetto

  1. Creare un progetto di applicazione WPF denominato WpfLayoutHostingWf.

  2. In Esplora soluzioni aggiungere un riferimento all'assembly WindowsFormsIntegration, denominato WindowsFormsIntegration.dll.

  3. In Esplora soluzioni aggiungere un riferimento all'assembly System.Windows.Forms, denominato System.Windows.Forms.dll. Aggiungere inoltre un riferimento all'assembly System.Drawing, denominato System.Drawing.dll.

  4. Fare doppio clic su Window1.xaml per aprirlo in visualizzazione XAML.

  5. All'inizio del file eseguire il mapping dello spazio dei nomi Windows Form al codice riportato di seguito.

    <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. Impostare l'elemento predefinito Grid creando cinque righe e tre colonne.

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

Utilizzo delle impostazioni di layout predefinite

Per impostazione predefinita, l'elemento WindowsFormsHost gestisce il layout del controllo Windows Form ospitato.

Per utilizzare le impostazioni di layout predefinite

  1. Copiare il codice riportato di seguito nell'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. Premere F5 per compilare ed eseguire l'applicazione. Il controllo System.Windows.Forms.ButtonWindows Form verrà visualizzato in Canvas. Il controllo ospitato viene ridimensionato in base al contenuto e l'elemento WindowsFormsHost viene ridimensionato in base al controllo ospitato.

Ridimensionamento in base al contenuto

L'elemento WindowsFormsHost garantisce che il controllo ospitato venga ridimensionato per visualizzare correttamente il contenuto.

Per ridimensionare in base al contenuto

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. I due nuovi controlli pulsante vengono ridimensionati per visualizzare correttamente la stringa di testo più lunga e la dimensione del carattere più grande e gli elementi WindowsFormsHost vengono ridimensionati in base ai controlli ospitati.

Utilizzo delle posizioni assolute

È possibile utilizzare le posizioni assolute per posizionare l'elemento WindowsFormsHost in qualsiasi punto dell'interfaccia utente.

Per utilizzare le posizioni assolute

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. L'elemento WindowsFormsHost viene posizionato a 20 pixel dal lato superiore della cella della griglia e a 20 pixel da sinistra.

Specifica esplicita delle dimensioni

È possibile specificare la dimensione dell'elemento WindowsFormsHost mediante le proprietà Width e Height.

Per specificare in modo esplicito le dimensioni

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. L'elemento WindowsFormsHost viene impostato a una dimensione di 50 pixel di larghezza per 70 pixel di altezza, impostazioni più ridotte rispetto a quelle del layout predefinito. Il contenuto del controllo Windows Form viene ridisposto di conseguenza.

Impostazione delle proprietà di layout

Impostare sempre le proprietà correlate al layout del controllo ospitato utilizzando le proprietà dell'elemento WindowsFormsHost. L'impostazione diretta delle proprietà di layout nel controllo ospitato darà risultati imprevisti.

L'impostazione delle proprietà correlate al layout nel controllo ospitato in XAML non ha alcun effetto.

Per visualizzare gli effetti dell'impostazione delle proprietà nel controllo

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. In Esplora soluzioni fare doppio clic su Window1.xaml.cs per aprirlo nell'editor del codice.

  3. Copiare il codice riportato di seguito nella definizione della classe Window1, dopo il costruttore 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. Premere F5 per compilare ed eseguire l'applicazione.

  5. Scegliere il pulsante Fare clic qui. Il gestore eventi button1Click imposta le proprietà Top e Left nel controllo ospitato. Ciò fa sì che il controllo ospitato venga riposizionato all'interno dell'elemento WindowsFormsHost. L'host mantiene la stessa area dello schermo, ma il controllo ospitato viene ritagliato. Al contrario, il controllo ospitato dovrebbe sempre occupare l'elemento WindowsFormsHost.

Informazioni sulle limitazioni dell'ordine Z

Gli elementi WindowsFormsHost visibili vengono sempre tracciati sopra altri elementi WPF e non vengono influenzati dall'ordine Z.

Per comprendere le limitazioni dell'ordine Z

  1. Nel file Window1.xaml copiare il codice riportato di seguito nell'elemento Grid, dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. L'elemento WindowsFormsHost viene disegnato sopra l'elemento etichetta.

Ancoraggio

L'elemento WindowsFormsHost supporta l'ancoraggio WPF. Impostare la proprietà associata Dock per ancorare il controllo ospitato in un elemento DockPanel.

Per ancorare un controllo ospitato

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. L'elemento WindowsFormsHost viene ancorato al lato destro dell'elemento DockPanel.

Impostazione della visibilità

È possibile rendere il controllo Windows Form invisibile o comprimerlo impostando la proprietà Visibility dell'elemento WindowsFormsHost. Quando un controllo non è visibile, non viene visualizzato ma occupa spazio del layout. Quando un controllo è compresso, non viene visualizzato né occupa spazio del layout.

Per impostare la visibilità di un controllo ospitato

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. In Esplora soluzioni fare doppio clic su Window1.xaml.cs per aprirlo nell'editor del codice.

  3. Copiare il codice riportato di seguito nella definizione della 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. Premere F5 per compilare ed eseguire l'applicazione.

  5. Fare clic sul pulsante Fare clic per rendere invisibile per rendere invisibile l'elemento WindowsFormsHost.

  6. Fare clic sul pulsante Fare clic per comprimere per nascondere completamente l'elemento WindowsFormsHost dal layout. Dopo avere compresso il controllo Windows Form, gli elementi circostanti vengono ridisposti per occuparne lo spazio.

Hosting di un controllo che non si adatta

Alcuni controlli Windows Form hanno una dimensione fissa e non si adattano per occupare lo spazio disponibile nel layout. Ad esempio il controllo MonthCalendar consente di visualizzare un mese in uno spazio fisso.

Per ospitare un controllo che non si adatta

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. L'elemento WindowsFormsHost viene centrato nella riga della griglia, ma non si adatta per occupare lo spazio disponibile. Se la finestra è sufficientemente grande, potrebbero essere visibili due o più mesi tramite il controllo MonthCalendar ospitato, ma saranno centrati nella riga. Il motore di layout WPF centra gli elementi che non possono essere ridimensionati per occupare lo spazio disponibile.

Ridimensionamento

A differenza degli elementi WPF la maggior parte dei controlli Windows Form non è continuamente ridimensionabile. L'elemento WindowsFormsHost ridimensiona il controllo ospitato quando possibile.

Per ridimensionare un controllo ospitato

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. Il controllo ospitato e gli elementi che lo circondano vengono ridimensionati in base a un fattore di 0,5. Tuttavia il carattere del controllo ospitato non viene ridimensionato.

Rotazione

A differenza degli elementi WPF, i controlli Windows Form non supportano la rotazione. L'elemento WindowsFormsHost non ruota con gli altri elementi WPF quando viene applicata una trasformazione di rotazione. Qualsiasi valore di rotazione diverso da 180 gradi genera l'evento LayoutError.

Per verificare l'effetto della rotazione in un'applicazione ibrida

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. Il controllo ospitato non viene ruotato, ma gli elementi che lo circondano vengono ruotati in base a un angolo di 180 gradi.

Impostazione della spaziatura interna e dei margini

La spaziatura interna e i margini nel layout di WPF sono simili alla spaziatura interna e ai margini in Windows Form. Impostare semplicemente le proprietà Padding e Margin nell'elemento WindowsFormsHost.

Per impostare la spaziatura interna e i margini per un controllo ospitato

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. Premere F5 per compilare ed eseguire l'applicazione. Le impostazioni della spaziatura interna e dei margini vengono applicate ai controlli Windows Form ospitati nello stesso modo in cui verrebbero applicate in Windows Form.

Utilizzo di contenitori di layout dinamici

Windows Form fornisce due contenitori di layout dinamici, FlowLayoutPanel e TableLayoutPanel. È anche possibile utilizzare questi contenitori nei layout di WPF.

Per utilizzare un contenitore di layout dinamico

  1. Copiare il codice riportato di seguito nell'elemento Grid dopo il precedente esempio di codice.

    <!-- 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. In Esplora soluzioni fare doppio clic su Window1.xaml.cs per aprirlo nell'editor del codice.

  3. Copiare il codice riportato di seguito nella definizione della 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. Aggiungere nel costruttore una chiamata al metodo InitializeFlowLayoutPanel.

    Public Sub New()
        InitializeComponent()
    
        Me.InitializeFlowLayoutPanel()
    
    End Sub
    
    public Window1()
    {
        InitializeComponent();
    
        this.InitializeFlowLayoutPanel();
    }
    
  5. Premere F5 per compilare ed eseguire l'applicazione. L'elemento WindowsFormsHost occupa DockPanel e FlowLayoutPanel dispone i controlli figlio nell'oggetto FlowDirection predefinito.

Vedere anche

Attività

Esempio di disposizione di controlli Windows Form in Windows Presentation Foundation

Concetti

Considerazioni sul layout per l'elemento WindowsFormsHost

Procedura dettagliata: hosting di controlli Windows Form compositi in Windows Presentation Foundation

Procedura dettagliata: hosting di controlli di Windows Presentation Foundation in Windows Form

Riferimenti

ElementHost

WindowsFormsHost

Altre risorse

Progettazione WPF

Procedure relative a migrazione e interoperabilità