WPF WindowsFormsHost大小调整

Jos*_*ose 11 wpf user-controls windowsformshost

我想在wpf UserControl中包装一个Windows窗体控件

<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>
Run Code Online (Sandbox Code Playgroud)

请注意,高度和宽度是自动的.

当我在stackpanel或网格控件中将它设置为0并基本上消失时.然后,用户需要调整窗口的大小(由于用户控件说我不需要空间,因此缩小了窗口,谢谢).当用户调整大小时,它会延伸到用户指定的任何内容.

所以我的问题是我做错了什么?如何让我的usercontrol占用所有可用空间而不是不要求任何空间?

yka*_*hou 19

我找到了一个更好的答案.

使用具有LastChildFill = true的dockPanel,然后将具有水平和垂直对齐的WindowsFormsHost放入Strech,当然WindowsForms控件必须填充.

<DockPanel LastChildFill="true">
    <WindowsFormsHost HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <Panel Dock=Fill />
    </WindowsFormsHost>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

请享用',


DLe*_*Leh 5

某些更正:DockPanel默认情况下启用了LastChildFill,并且水平和垂直路线也自动设置为拉伸。

因此,简洁的答案是:使用DockPanel

<DockPanel>
     <WindowsFormsHost>
     </WindowsFormsHost>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)


Dav*_*rab 3

我也有同样的问题。我解决这个问题的方法是在运行时更改 WindowsFormsHost 内控件的大小。

在我的例子中,我使用 StackPanel 来托管控件,并在运行时将 WindowsFormsHost 内控件的高度和宽度设置为 Stackpanel 的高度和宽度。您想要使用 ActualHieight 和 ActualWidth 属性。

不幸的是,每次调整窗口大小时,我都必须连接大小调整事件来更改它。