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)
请享用',
某些更正:DockPanel默认情况下启用了LastChildFill,并且水平和垂直路线也自动设置为拉伸。
因此,简洁的答案是:使用DockPanel
<DockPanel>
<WindowsFormsHost>
</WindowsFormsHost>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
我也有同样的问题。我解决这个问题的方法是在运行时更改 WindowsFormsHost 内控件的大小。
在我的例子中,我使用 StackPanel 来托管控件,并在运行时将 WindowsFormsHost 内控件的高度和宽度设置为 Stackpanel 的高度和宽度。您想要使用 ActualHieight 和 ActualWidth 属性。
不幸的是,每次调整窗口大小时,我都必须连接大小调整事件来更改它。