2009-06-10 2 views
10

크기 조정 내가WPF 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> 

주의 그 높이의 WPF UserControl을에서 윈도우 폼 컨트롤을 래핑하는 원 및 너비는 자동입니다.

stackpanel 또는 그리드 컨트롤에서 높이를 0으로 설정하면 기본적으로 사라집니다. 그런 다음 사용자는 윈도우 크기를 조정해야합니다 (사용자 콘트롤에서 공간이 필요하지 않기 때문에 축소되었습니다. 감사합니다). 사용자가 크기를 조정하면 사용자가 지정한대로 확장됩니다.

그럼 내 질문에 내가 뭘 잘못 했니? 내 사용자 정의 컨트롤을 요청하지 않고 모든 공간을 사용할 수있게하려면 어떻게해야합니까?

답변

3

동일한 문제가있었습니다. 내가 고쳐 놓은 방식은 런타임에 WindowsFormsHost 내부의 컨트롤 크기를 변경하는 것이 었습니다.

제 경우에는 StackPanel을 사용하여 컨트롤을 호스트했으며 런타임에 StackPelight의 높이와 너비로 WindowsFormsHost 내 컨트롤의 높이와 너비를 설정했습니다. ActualHieight 및 ActualWidth 속성을 사용하려고합니다.

불행히도 크기 조정 이벤트에 연결해야만 창이 크기가 조정될 때마다 변경해야했습니다.

19

나는 더 좋은 대답을 찾았습니다.

LastChildFill = true 인 dockPanel을 사용하고 Strech에 Horizontal 및 Vertical Alignement가있는 WindowsFormsHost 안에 넣습니다. 물론 WindowsForms 컨트롤을 채워야합니다.

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

즐길 수 '

,

2

나는 비슷한 문제가 어떤 종류의가 있었다. WinForm 양식에서 최소 및 최대 높이 및 너비 설정을 제거하여 문제를 해결할 수있었습니다.

그 후 저는 ykatchou와 같은 DockPanel을 사용했습니다. 나는 여전히 DPI에 관한 몇 가지 문제를 가지고 있지만, 나는 그들이 중요 할 것이라고 생각하지 않는다. 못 생겼지 만 작동 중임

4

같은 문제가 있습니다. 내가 한 일은 상위 호스트 (즉, WindowsFormHost)의 크기 (너비 및 높이)에 아래의 코드를 참조하여 WindowsForm 컨트롤 (포함해야 함) 치수를 바인딩하는 것입니다. 이것은 윈도우 폼이로드 된 후에 수행됩니다

UserWinFormControl는 XAML 쓰기에서 WindowsFormHost 주최 임베디드 할 수있는 제어 /입니다
private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    UserWinFormControl.Height = UserWinFormControl.Parent.Height; 
    UserWinFormControl.Width = UserWinFormControl.Parent.Width; 

} 

:

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