视框使WindowsFormsHost在WPF中消失(Viewbox makes WindowsFo

2019-09-20 13:33发布

我有一个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): 代码

Answer 1:

请将您的电网分离器在零列,所以你不会有WPF布局斗争。 下面是修改后的代码(注意网格分离塔,HORIZ对准,和视图箱余量):

<GridSplitter Grid.Column="0" HorizontalAlignment="Right" Name="gridSplitter1" Width="10" VerticalContentAlignment="Center" />
        <Viewbox Margin="10">
            <WindowsFormsHost Name="windowsFormsHost1" VerticalAlignment="Center" HorizontalAlignment="Center" />
        </Viewbox>

您可以视框缘刚好在右边,使其更好看



Answer 2:

我最终摆脱视框,并控制WidowsFormHost后尺寸自己。



文章来源: Viewbox makes WindowsFormsHost disappear in WPF