当其他内容折叠时,网格内容会扩展以填充容器?

时间:2012-08-09 14:22:20

标签: wpf xaml

我有一个基本布局的窗口:

<Window x:Class="GridStuffs.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Button Grid.Row="0" Click="TopButtonClick" VerticalAlignment="Stretch">Top</Button>
    <Button Grid.Row="1" Name="_bottomButton">Bottom</Button>
</Grid>

这只是显示两个按钮'top'和'bottom',每个按钮在窗口中占据相同的垂直空间。

单击顶部按钮执行以下操作:

private void TopButtonClick(object sender, RoutedEventArgs e)
{
    if (_bottomButton.Visibility == Visibility.Collapsed)
    {
        _bottomButton.Visibility = Visibility.Visible;
    }
    else
    {
        _bottomButton.Visibility = Visibility.Collapsed;
    }
}

...切换折叠和可见之间的底部按钮的Visibity。

我想要发生的是在顶部按钮折叠时调整顶部按钮以填充窗口。实际发生的是底部按钮被隐藏,但顶部按钮保留了它的原始尺寸。

问题:当底部按钮折叠时,我必须做什么wpf / xaml魔术才能让顶部按钮展开以填充窗口?

1 个答案:

答案 0 :(得分:13)

将顶部RowDefinition设置为Height="*",这意味着它将占用所有可用空间,并将第二个RowDefinition设置为Height="Auto",这意味着它将占用尽可能多的空间因为它需要显示其内容,

<Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="Auto" />
</Grid.RowDefinitions>

如果未定义第二个按钮的高度且应该是网格高度的50%,我会使用转换器将Button.Height属性绑定到父网格高度的一半

<Button Height="{Binding ActualHeight, 
    RelativeSource={RelativeSource Grid}, 
    Converter={StaticResource HalfOfValueConverter}}" />

如果您感兴趣,我实际上有一个MathConverter张贴on my blog我用于任何具有约束值的数学方程式。

<Button Height="{Binding ActualHeight, 
    RelativeSource={RelativeSource Grid}, 
    Converter={StaticResource MathConverter},
    ConverterParameter=@VALUE/2}" />