我有一个WPF项目,其中我通过将视频控件放在ViewBox中来保持视频比例。视频控件是包裹在WindowsFormsHost中的WinForms对象。我还添加了gridSplitter来调整ViewBox的大小。一切都很好,直到我注意到一个奇怪的bug。当我使用gridSplitter控件将ViewBox最小化接近零时,视频比例在再次展开后会出现问题。当我使用gridSplitter将ViewBox收缩到0时,WindowsFormHost在扩展后会完全消失(它仍然存在,但其实际宽度和高度现在为0)。
删除ViewBox控件,并仅使用WindowsFormsHost可以正常工作,但我需要ViewBox来控制纵横比。如果我找不到解决方案,我将不得不自己控制比率作为解决方法。
我想我一定做错了什么,所以我写了一个快速测试程序来重现这个问题。我将在下面发布完整程序的链接(它是用C#,VS2008编写的)。
在测试程序中,我创建了一个具有两列的网格,并使用gridsplitter让您调整它们的大小。然后我在左侧控件中放置了一个ViewBox,并在其中放置了一个WindowsFormsHost。然后我在WindowsFormsHost中托管了一个红色_winFormsButton。
按钮可以正常缩放,直到您完全收缩左列,然后再次展开它。按钮就会消失。如何防止出现这种情况,使按钮在收缩和展开左列后继续缩放?谢谢。
XAML:
删除ViewBox控件,并仅使用WindowsFormsHost可以正常工作,但我需要ViewBox来控制纵横比。如果我找不到解决方案,我将不得不自己控制比率作为解决方法。
我想我一定做错了什么,所以我写了一个快速测试程序来重现这个问题。我将在下面发布完整程序的链接(它是用C#,VS2008编写的)。
在测试程序中,我创建了一个具有两列的网格,并使用gridsplitter让您调整它们的大小。然后我在左侧控件中放置了一个ViewBox,并在其中放置了一个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): 代码