为什么高度不正确?

时间:2011-07-20 05:13:11

标签: wpf silverlight-4.0

我有一个简单的WPF表格和下一个XAML

<Window x:Class="ReikartzDataConverter.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="650" Width="800">
    <Grid Width="780" Height="650">
        <Grid.RowDefinitions>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="500"></RowDefinition>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="50"></RowDefinition>
        </Grid.RowDefinitions>

        <Label Grid.Row="0" Content="Process information" Height="28" HorizontalAlignment="Left" Margin="0,20,0,0" Name="label1" VerticalAlignment="Top" Width="235" />
        <DataGrid Grid.Row="1" Width="780" Height="500" Name="paysTable">            
        </DataGrid>
        <Label Grid.Row="2" Height="28" Name="lblError" VerticalAlignment="Top" Visibility="Hidden" Foreground="OrangeRed" FontWeight="Bold" FontSize="12" />
        <Button Grid.Row="3" Content="Quit" Height="23" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        <Button Grid.Row="3" Content="Start" Height="23" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
    </Grid>
</Window>

为什么Grid.Row =“3”中的2个按钮部分位于窗口可见部分之外?

我的窗口高度=“650”,我的网格也有高度=“650” 我有4行:50,50,500,50。所以最后一行必须位于窗口内。为什么不是这样?

2 个答案:

答案 0 :(得分:2)

650的窗口高度还包括“镶边”,即窗口顶部的条形图,带有最小化,最大化按钮。创建一个不依赖于特定高度的布局是一种更好的方法。在您的情况下,我会使包含您的网格的行自动调整大小:

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

然后你可以从网格和所有其他UI元素中删除高度/宽度,只需让网格决定其子元素的大小。

答案 1 :(得分:2)

@ColinE的答案是正确的方法,你应该在WPF中采用“流畅”的布局,但如果你真的想要一个固定的内容高度,你需要窗口大小合适,你可以使用{ {3}}属性:

<Window x:Class="ReikartzDataConverter.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Width="800"
    SizeToContent="Height">

    <Grid Width="780" Height="650">
        ...
    </Grid>
</Window>

将SizeToContent设置为“Height”将使窗口垂直调整大小以使其内容适合。不要忘记从Window声明中删除Height属性。