如何布置WPF控件以在彼此折叠时填充其父级

时间:2013-10-29 16:20:52

标签: .net wpf layout

我有一个UserControl,上面有两个不同的UserControl。通常,GridPanel会在控件之间使用拆分器来完成其工作。 现在,如果其中一个控件被折叠 - 通过数据绑定到父UserControl上的设置 - 另一个应该延伸到可用空间......当然,反之亦然。

尝试 - 并且失败 - 解决方案:

的GridPanel: 仍然可见的控件不会拉伸,因为折叠控件的行仍然存在。

DockPanel中: 有可能折叠顶部对接控件,这将导致填充控件拉伸......但不是另一种方式。

是否有一种简单的方法来实现所描述的行为?

1 个答案:

答案 0 :(得分:0)

您可以控制容器以获得所需的行为。 当两个项目都显示时,您可以这样做:

<RowDefinition Height="*" />
<RowDefinition Height="*" />

如果您只希望显示一个,请将其更改为:

<RowDefinition Height="*" />
<RowDefinition Height="0" />

当你想让另一个人表明你这样做时:

<RowDefinition Height="0" />
<RowDefinition Height="*" />

对于优雅的解决方案,您可以将高度绑定到控件的可见性值。然后创建一个转换器,如果可见性是折叠的,则返回高度0;如果可见性是可见的,则返回*:

        <Grid Height="200" Width="200">
            <Grid.RowDefinitions>
                <RowDefinition Height="{Binding ElementName=TopControl, Path=Visibility, Converter={StaticResource VisibilityToHeightConverter}}" />
                <RowDefinition Height="{Binding ElementName=BottomControl, Path=Visibility, Converter={StaticResource VisibilityToHeightConverter}}" />
            </Grid.RowDefinitions>

            <ContentControl Name="TopControl" />
            <ContentControl Name="BottomControl" Grid.Row="1" />
        </Grid>