3

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

尝试和失败的解决方案:

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

DockPanel: 可能会折叠顶部停靠的控件,这将导致填充控件拉伸......但不是相反。

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

4

1 回答 1

0

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

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

当您只想显示一个时,请将其更改为:

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

当您希望另一个人向您展示时,请执行以下操作:

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

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

        <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>
于 2013-10-29T16:34:30.307 回答