3

WPF Grid 控件的行为让我很困惑。

这是我能得到的最简单的复制品:

<Window x:Class="WpfApplication2.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 Height="*" MinHeight="100" MaxHeight="300" />
            <RowDefinition Height="0.1*" MinHeight="100" />
        </Grid.RowDefinitions>
        <Button Grid.Row="0" Height="200" />
        <Button Grid.Row="1" />
    </Grid>
</Window>

如果您运行它并缩小窗口,您会注意到底部按钮在顶部按钮开始缩小之前被剪掉。

Height="200"您可以通过从按钮中删除来获得所需的行为。但是,在我的实际用例中,按钮被替换为包含 ScrollViewer 的 Border。虽然我没有明确地设置任何一个高度(但我做了一个 ScrollViewer 的内容),但可以看到相同的剪裁行为。

所以,问题:

如何让行忽略其内容的高度?或者有没有其他方法可以达到同样的效果?

4

1 回答 1

2

您的最小网格尺寸为 300(第 1 行为 200,第 2 行为 100),因此您的最小网格尺寸为Grid300。如果您将窗口缩小到该尺寸以下,它只是剪切Grid和隐藏部分,而不是缩放它.

也许您可以改用 a DockPanel

<DockPanel>
    <Button DockPanel.Dock="Bottom" MinHeight="100" />
    <Button Grid.Row="0" Height="200" MinHeight="100" MaxHeight="300"  />
</DockPanel>

这样,您的底部位将始终停靠在屏幕底部,而其他内容会占用剩余空间。

如果您真的想保持您的大小比例,我建议您使用一个转换器,将您的内容控件的高度设置为窗口大小的百分比。

<DockPanel x:Name="Parent">
    <Button DockPanel.Dock="Bottom" MinHeight="100" 
            Height="{Binding ActualHeight,
                             ElementName=Parent, 
                             Converter={StaticResource PercentConverter}, 
                             ConverterParameter=0.1}" />
    <Button Grid.Row="0" Height="200" MinHeight="100" MaxHeight="300"  />
</DockPanel>
于 2012-06-22T15:01:02.200 回答