2009-06-10 2 views
10

Я хотел, чтобы обернуть контроль окна формы в WPF UserControlWPF WindowsFormsHost проклейки

<UserControl x:Class="MVVMLibrary.ReportViewer" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ws="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" 
    Height="Auto" Width="Auto"> 
    <Grid> 
     <WindowsFormsHost Name="Host"> 
      <ws:ReportViewer/> 
     </WindowsFormsHost> 
    </Grid> 
</UserControl> 

Обратите внимание, что высота и ширина авто.

Когда у меня есть это в стеке или управлении сеткой, он устанавливает его высоту в 0 и в основном исчезает. Затем пользователю необходимо изменить размер окна (которое сократилось, потому что пользовательский контроль сказал, что мне не нужно свободного места, спасибо). Когда пользователь изменяет размер, он растягивается до того, что указывает пользователь.

Так что мой вопрос в том, что я сделал не так? Как заставить мой usercontrol взять все свободное пространство, а не просить какого-либо?

ответ

3

У меня была эта проблема. Я исправил это, чтобы изменить размер элемента управления внутри WindowsFormsHost во время выполнения.

В моем случае я использовал StackPanel для размещения элемента управления, и во время выполнения я установил высоту и ширину элемента управления в моем WindowsFormsHost на высоту и ширину Stackpanel. Вы хотите использовать свойства ActualHieight и ActualWidth.

К сожалению, мне пришлось подключаться к событию калибровки, изменяя его каждый раз при изменении размера окна.

19

Я нахожу лучший ответ.

Используйте dockPanel с LastChildFill = true, а затем поместите внутри WindowsFormsHost с горизонтальным и вертикальным выравниванием в Strech, и, конечно, элемент управления WindowsForms должен заполнить.

<DockPanel LastChildFill="true"> 
    <WindowsFormsHost HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Panel Dock=Fill /> 
    </WindowsFormsHost> 
</DockPanel> 

Enjoy»,

2

У меня был какой-то подобной проблемы. Я смог исправить свою проблему, удалив настройки min и max Height и Width из формы winForm.

После этого я использовал DockPanel, как предложил ykatchou. У меня все еще есть проблемы с ДОИ, но я не думаю, что они будут иметь большое значение. Это уродливо, но оно работает

4

Та же проблема здесь. То, что я сделал, - это связать размеры элементов управления WindowsForm (которые должны быть внедрены) с размерами (Ширина и высота) родительского узла (то есть WindowsFormHost), см. Код ниже. Это делается после загрузки формы окна:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    UserWinFormControl.Height = UserWinFormControl.Parent.Height; 
    UserWinFormControl.Width = UserWinFormControl.Parent.Width; 

} 

Где UserWinFormControl является контроль будет поместить его/организованный WindowsFormHost В Xaml пишут:

<Window x:Class="myAppWpf.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
     Title="MyApp" 
     Height="737" 
     Width="1024" 
     WindowStartupLocation="CenterScreen" 
     Loaded="Window_Loaded"> 
     <......> 
     <DockPanel LastChildFill="true"> 
         <WindowsFormsHost Name="windowsFormsHost1"DockPanel.Dock="Top" 
              Background="Yellow"   
              HorizontalAlignment="Stretch"    
              VerticalAlignment="Stretch" > 
         </WindowsFormsHost> 
     </DockPanel> 
     </....> 
</Window> 

Все работает нормально не мерцает, когда изменение размера приложения.

+1

спасибо - Каким-то образом дает контроль цвет фона значительно уменьшенное мерцание управления. – Justin

4

Некоторые исправления: DockPanel поддерживает LastChildFill по умолчанию, а горизонтальные и вертикальные выравнивания также автоматически настраиваются на растяжение.

Так краткий ответ: Используйте DockPanel

<DockPanel> 
    <WindowsFormsHost> 
    </WindowsFormsHost> 
</DockPanel> 
Смежные вопросы