我寻找的行为基本上是一个DockPanel,我希望最后一个孩子来填充可用空间。捕获的是,我希望它是最后一个可见的孩子。在我的情况下,我有两个视图,我想并排显示。
到目前为止,我已经尝试了将两种不同的样式应用到网格中,似乎都不起作用。我还尝试使用一个转换器,它在理论上似乎起作用(我可以使用double.NaN返回“Auto”),但我不确定如何从代码中返回宽度为“*”的值。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*">
<ColumnDefinition.Style>
<Style TargetType="{x:Type ColumnDefinition}">
<Style.Triggers>
<DataTrigger Binding="{Binding Visibility, ElementName=ccSomeItems}" Value="Collapsed">
<Setter Property="Width" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition Width="*">
<ColumnDefinition.Style>
<Style TargetType="{x:Type ColumnDefinition}">
<Style.Triggers>
<DataTrigger Binding="{Binding SomeOtherItems.AllOtherItems.Count, Converter={StaticResource IntegerToVisibilityConverter}}" Value="Collapsed">
<Setter Property="Width" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
</Grid.ColumnDefinitions>
<ContentControl x:Name="ccSomeItems" Content="{Binding SomeItems}" Margin="4" Visibility="{Binding SomeItems.AllItems.Count, Converter={StaticResource IntegerToVisibilityConverter}}" />
<ContentControl Grid.Column="1" Content="{Binding SomeOtherItems}" Margin="4" Visibility="{Binding SomeOtherItems.AllOtherItems.Count, Converter={StaticResource IntegerToVisibilityConverter}}" />
</Grid>
3条答案
按热度按时间nxagd54h1#
我能够运行雷切尔的评论,并找到一个使用转换器的解决方案。
XAML:
转换器:
pn9klfpd2#
我发现了一个更简单的解决方案,那就是用一个Grid元素包围你想要填充可用空间的元素。这样,网格就成为了最后一个总是填充可用空间的元素。网格中的控件可以将它们的可见性设置为任何它们想要的。
ruoxqz4g3#
我知道这是旧的,但我的解决方案是简单地将最后一个子项 Package 在一个StackPanel中,如下所示: