2012-07-31 87 views
2

我有一个WPF项目,我通过将视频控件放置在ViewBox中来保持视频比例。视频控件是一个封装在WindowsFormsHost中的WinForms对象。我还添加了一个gridSplitter来调整ViewBox的大小。这一切都很好,直到我注意到一个奇怪的bug。当我使用gridSplitter控件将ViewBox接近零时,视频比例在再次展开后会变得不合适。当我使用gridSplitter将ViewBox缩小到0时,WindowsFormHost会在展开后完全消失(它仍然存在,但它的ActualWidth和ActualHeight现在为0)。Viewbox使WindowsFormsHost在WPF中消失

删除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

回答

0

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

0

将您GR在零列中的ID分离器,所以你不会有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> 

您可以视框缘刚好在右侧,使它看起来更好

+0

移动GridSplitter不会解决问题。在我的生产代码中,我将GridSplitter控件放置在它自己的列中(这是推荐的做法),并且问题仍然存在。 – Eternal21 2012-08-01 03:48:12

+0

只是为了它的地狱,我尝试了你的改变,并怀疑它不起作用。问题是一旦视口最小化为0,winformsHost就不会恢复。 – Eternal21 2012-08-01 03:56:54

+0

@ Eternal21 - 我很困惑。您将答案标记为解决方案,但您的评论意见不一。这是否得到解决? – flamebaud 2012-10-09 16:56:56

相关问题