gpt4 book ai didi

c# - Viewbox 使 WindowsFormsHost 在 WPF 中消失

转载 作者:行者123 更新时间:2023-11-30 18:38:14 29 4
gpt4 key购买 nike

我有一个 WPF 项目,我通过将视频控件放置在 ViewBox 中来保持视频比例。视频控件是一个包含在 WindowsFormsHost 中的 WinForms 对象。我还添加了一个 gridSplitter 来调整 ViewBox 的大小。一切都很好,直到我注意到一个奇怪的错误。当我使用 gridSplitter 控件将 ViewBox 最小化到接近于零时,视频比例会在再次展开后搞砸。当我使用 gridSplitter 将 ViewBox 一直收缩到 0 时,WindowsFormHost 在扩展后将完全消失(它仍然存在,但它的 ActualWidth 和 ActualHeight 现在为 0)。

删除 ViewBox 控件,仅使用 WindowsFormsHost 效果很好,但我需要 ViewBox 来控制纵横比。如果找不到解决方案,我将不得不自己控制比率作为解决方法。

我想我一定是做错了什么,所以我写了一个快速测试程序来重现这个问题。我将在下面发布完整程序的链接(它在 C#、VS2008 中)。

在测试程序中,我创建了一个包含两列的网格,并使用网格拆分器调整它们的大小。然后,我在左侧控件中放置了一个 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;
}
}

示例代码输出: image

测试项目代码链接(VS2008): code

最佳答案

将您的网格拆分器放在零列中,这样您就不会出现 WPF 布局冲突。这是修改后的代码(注意 Grid Splitter 列、水平对齐和 View 框边距):

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

你可以让ViewBox的边距正好在右边,让它看起来更好

关于c# - Viewbox 使 WindowsFormsHost 在 WPF 中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11748935/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com