【问题标题】:How to layout WPF controls to fill its parent when each other is collapsed当彼此折叠时如何布局WPF控件以填充其父级
【发布时间】:2013-11-08 22:29:33
【问题描述】:

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

尝试和失败的解决方案:

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

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

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

【问题讨论】:

  • 发布您当前的 XAML 以及您拥有的内容与所需内容的屏幕截图。
  • 您将可见性设置为折叠状态?

标签: .net wpf layout


【解决方案1】:

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

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

【讨论】:

  • 我明白你回答的意思。但是如何让控件在可用空间上伸展(基本上是在其中一个控件折叠之后)?
  • 我将我的答案修改为新的东西。抱歉有点晚了,希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2020-12-19
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
相关资源
最近更新 更多