我有一个基本布局的窗口:
<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魔术才能让顶部按钮展开以填充窗口?
答案 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}" />