2016-07-23 7 views
1

füllen Ich erstellte Wpf UserControl und hostet es in WinForm.Kann den gesamten Speicherplatz nicht mit WPF-Steuerelement in WinForm

<UserControl x:Class="Sapphire.WpfUserControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" Height="527" Width="992"> 
<Canvas x:Name="videoCanvas" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" > 
    <Label Canvas.ZIndex="2" Content="Label" Canvas.Left="165" Canvas.Top="50" Width="125" Foreground="#FFFFFEFF"/> 
    <MediaElement x:Name="videoElement" Canvas.ZIndex="1" Canvas.Left="10" Canvas.Top="10" /> 
</Canvas> 

Da diese WPF-Steuerelement in Designer-Datei angezeigt wird durch HostElement gehostet:

  // 
     // elementHost1 
     // 
     this.elementHost1.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.elementHost1.Location = new System.Drawing.Point(0, 0); 
     this.elementHost1.Name = "elementHost1"; 
     this.elementHost1.Size = new System.Drawing.Size(1130, 593); 
     this.elementHost1.TabIndex = 2; 
     this.elementHost1.Text = "elementHost1"; 
     this.elementHost1.Child = this.wpfUserControl1; 

Also alles korrekt aussieht. Sie können auch sehen, dass der DockStyle Fill ist. Das WPF-Steuerelement füllt jedoch nicht das gesamte WinForm-Objekt und zeigt immer eine Größe an, die in Designer festgelegt und angezeigt wird.

entfernte ich die Höhe und Breite sowohl aus Canvas und von Mediaelement, dass Canvas enthält, aber es hat keine Auswirkungen ...

Ich würde es begrüßen, wenn jemand darauf hinweisen kann, was ich hier falsch mache - ich bin neu bei WPF.

+0

http://stackoverflow.com/questions/19393774/how-to-make-all-controls-resize-accordingly-proportionally-when-window-is-maximi –

+0

Ich bin nicht sicher, was Sie vorschlagen, indem Sie auf diesen Code zeigen - ich habe ein bestimmtes Problem und verstehe nicht, was ich falsch mache ... im Vergleich zu Ihrem Code ist nicht genau Äpfel-zu-Äpfel: ein bisschen anderes Problem , nicht wahr? –

Antwort

0

Sie benötigen die Width und Height des <UserControl> so dass die enthaltenen ElementHost steuert die Größe der enthaltenen Elemente entfernen:

<UserControl x:Class="Sapphire.WpfUserControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d"> 

Wenn Sie eine bestimmte Größe im Designer möchten, können Sie d:DesignHeight verwenden und d:DesignWidth Attribute:

<UserControl x:Class="Sapphire.WpfUserControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" d:DesignHeight="527" d:DesignWidth="992"> 
+0

Ich tat genau wie Sie vorgeschlagen, aber es hat nicht geholfen ... –

+0

Ein weiteres Stück von Informationen, die ich beobachtete: Wenn ich die Abmessungen zu erhöhen: mc: Ignorierbar = "d" d: DesignHeight = "800" d: DesignWidth = "1900" es ist im Designer, aber nicht zur Laufzeit reflektiert - die Abmessungen auf dem Bildschirm bleiben die gleichen wie zuvor ... so frage ich mich, wo ist schuld ... –

+0

BTW, der in Designer zeigt Auto (1900) und Auto (1060) für Breite bzw. Höhe ... –