我有一个WPF项目中,我保持视频的比例,通过将视频控制一个视框里面。 视频控制是缠绕的WindowsFormsHost内一个WinForms对象。 我还添加了gridSplitter来调整视框。 这一切伟大的工作,直到我注意到一个奇怪的错误。 当我将使用gridSplitter控制,降低视框接近零,视频比例将再次获得扩大后,它搞砸了。 当我用gridSplitter承包视框一路下跌到0时,WindowsFormHost将完全展开后消失(它仍然存在,但它的ActualWidth的和的ActualHeight现在是0)。
卸下视框控件,只是用WindowsFormsHost工作正常,但我需要视框控制宽高比。 如果我不能找到一个解决方案,我将不得不自己控制的比例作为一种解决方法。
我想我必须做一些错误的,所以我写了能重现问题的快速测试程序。 我将发布一个链接到下面的完整程序(它在C#中,VS2008)。
在测试程序中,我创建了有两个列的网格与gridsplitter,可以让你调整它们的大小。 然后我把一个视框左侧的控制和放置一个WindowsFormsHost里面。 然后我主持WindowsFormsHost内红色_winFormsButton。
按钮鳞细,直到完全收缩左栏,然后再展开。 该按钮消失。 如何防止这种情况发生,所以按钮继续收缩与膨胀左侧立柱后规模? 谢谢。
XAML:
<Window x:Class="DisappearingHost.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*" />
<ColumnDefinition Width="0.5*" />
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" HorizontalAlignment="Left" Name="gridSplitter1" Width="10" VerticalContentAlignment="Center" />
<Viewbox>
<WindowsFormsHost Name="windowsFormsHost1" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Viewbox>
</Grid>
</Window>
后面的代码:
public partial class Window1 : Window
{
System.Windows.Forms.Button _winFormsButton = new System.Windows.Forms.Button();
public Window1()
{
InitializeComponent();
_winFormsButton.Text = "I disappear!";
_winFormsButton.Size = new System.Drawing.Size(50, 50);
_winFormsButton.BackColor = System.Drawing.Color.Red;
windowsFormsHost1.Child = _winFormsButton;
}
}
示例代码的输出:
链接到测试项目代码(VS2008): 代码