我有一个用户控件,上面有两个不同的用户控件。通常,GridPanel 会在控件之间使用拆分器来完成其工作。现在,如果其中一个控件被折叠 - 通过数据绑定到父 UserControl 上的设置 - 另一个应该伸展到可用空间......当然,反之亦然。
尝试和失败的解决方案:
GridPanel: 仍然可见的控件不会拉伸,因为折叠控件的行仍然存在。
DockPanel: 可能会折叠顶部停靠的控件,这将导致填充控件拉伸......但不是相反。
有没有一种简单的方法来实现所描述的行为?
您可以控制容器以获得所需的行为。当两个项目都显示时,您可以这样做:
<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>