2016-07-23 2 views
1

Я создал Wpf UserControl и размещаю его в WinForm.Невозможно заполнить пространство с помощью элемента управления WPF в 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> 

Как показано в файле конструктора этот элемент управления WPF размещен через HostElement:

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

Так выглядит все правильно. Вы также можете видеть, что DockStyle заполняется. Однако элемент управления WPF не заполняет весь WinForm и всегда отображает размер, заданный и отображаемый в Designer.

Я удалил высоту и ширину и от холста и от MediaElement, что холст содержит, но это не имеет никакого эффекта ...

Я был бы признателен, если кто-то может указать на то, что я здесь делаю неправильно - я новичок в WPF.

+0

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

+0

Я не уверен, что вы предлагаете сделать, указав на этот код - у меня есть конкретная проблема и я не понимаю, что я делаю неправильно ... по сравнению с вашим кодом не совсем яблоки для яблок: немного другая проблема , не так ли? –

ответ

0

Вы должны удалить Width и Height в <UserControl> так, что содержащие ElementHost контролирует размер содержащихся элементов:

<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 и d:DesignWidth атрибуты:

<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

Я сделал то, что вы предложили, но это не помогло ... –

+0

Другая информация, которую я наблюдал: Если я увеличу размеры: mc: Ignorable = "d" d: DesignHeight = "800" d: DesignWidth = «1900» отражается в Дизайнере, но не во время выполнения - размеры на экране остаются такими же, как раньше ... так что я задаюсь вопросом, где виновник ... –

+0

BTW, в Дизайнере он показывает Auto (1900) и Авто (1060) для ширины и высоты соответственно ... –

Смежные вопросы