5

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

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

这只是显示两个按钮“顶部”和“底部”,每个按钮在窗口中占据相等的垂直空间。

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

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

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

我想要发生的是在底部按钮折叠时调整顶部按钮的大小以填充窗口。实际发生的是底部按钮被隐藏,但顶部按钮保持其原始大小。

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

4

1 回答 1

16

将顶部设置RowDefinitionHeight="*",表示它将占用所有可用空间,将第二个设置RowDefinitionHeight="Auto"表示它将占用显示其内容所需的空间,

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

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

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

如果您有兴趣,我实际上在我的博客上MathConverter发布了一个帖子,用于任何类型的具有界值的数学方程。

<Button Height="{Binding ActualHeight, 
    RelativeSource={RelativeSource Grid}, 
    Converter={StaticResource MathConverter},
    ConverterParameter=@VALUE/2}" />
于 2012-08-09T14:24:34.983 回答