1

假设我有 1 行和 2 列。两者都有一个视频流,它会自动调整大小以填充它可以填充的内容,因此它们都占据了一半的屏幕。

我希望能够删除一个流并让第二个流填满整个屏幕。所以基本上,让第二个单元格推动以填满整个屏幕,因为没有任何东西占据第一个单元格以“推回”它。

我知道我可以通过删除单元格来做到这一点,但如果有一些设置来完成我所描述的内容,它会更清洁、更简单和更容易。

编辑:

    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

我只从其中一个开始,然后通过以下方式动态扩展:

                if (grd.ColumnDefinitions.Count == grd.RowDefinitions.Count)
                {
                    System.Windows.Controls.ColumnDefinition newColumn;
                    newColumn = new System.Windows.Controls.ColumnDefinition();
                    grd.ColumnDefinitions.Add(newColumn);
                    Column = grd.ColumnDefinitions.Count - 1;
                    Row = 0;
                }
                else
                {
                    System.Windows.Controls.RowDefinition newRow;
                    newRow = new System.Windows.Controls.RowDefinition();
                    grd.RowDefinitions.Add(newRow);
                    Row = grd.RowDefinitions.Count - 1;
                    Column = 0;
                }
4

2 回答 2

2

尝试将容器控件(视图流控件本身或其容器)WidthGridViewColumnto0和 the设置为.VisibilityCollapsed

编辑
虽然 aUniformGrid可能更容易使用。然后您只需将控件的可见性设置为折叠(这将从宽度计算中删除该控件)。

我建议将 UniformGrid 的Rows属性设置1为将所有内容都放在一行上(否则它将开始交替添加行和列的过程)。

<UniformGrid Rows="1">
    <Grid Visibility="{Binding IsVideo1Visible, Converter={BooleanToVisibilityConverter}}">
        <abc:VideoStream>
    </Grid>
    <abc:VideoStream Visibility="{Binding IsVideo2Visible, Converter={BooleanToVisibilityConverter}}">
</UniformGrid>

使用上面的代码获得灵感。第一个视频流控件包含在一个 Grid 中,只是为了演示如果您使用的控件不公开,您可以如何“添加”可见性属性。它是完全可选的。

于 2012-10-25T14:09:09.003 回答
0

另一种解决方案是将两个视频流包装到网格中的单个 StackPanel 中。然后,将视频控件的 Visibility 设置为 Collapsed 将提供您正在寻找的功能。

然而,StackPanels 确实消除了 WPF 的“自动调整大小”魔法的很大一部分,因为它们具有无限的宽度和高度,但在某些情况下它是一个简单的解决方案。

于 2012-10-25T14:23:28.400 回答