自动调整单元格大小以填充屏幕而不删除单元格

时间:2012-10-25 13:53:41

标签: c# .net wpf

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

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

我知道我可以通过删除单元格来实现这一点,但如果有一些设置可以实现我所描述的内容,那么它会更清晰,更简单,更容易。

编辑:

    <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;
                }

2 个答案:

答案 0 :(得分:2)

尝试将Width的{​​{1}}设置为GridViewColumn,并将容器控件的0(视图流控件本身或其容器)设置为{{1 }}

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

我建议将UniformGrid的Visibility属性设置为Collapsed,以便将所有内容保存在一行中(否则它将开始交替添加行和列的过程)。

Rows

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

答案 1 :(得分:0)

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

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