使用SizeToContent无法正确计算Wpf网格行高度

时间:2010-10-20 12:47:45

标签: wpf wpf-controls

在以下示例中,有两个Grid行,其高度为6*4*。问题是只有在用户更改窗口大小后,才会计算行的正确高度。 只有在设置SizeToContent标志时才会发生这种情况 有什么想法吗?如何在窗口加载时强制窗口自动计算高度?

<Window x:Class="TestGridRow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" SizeToContent="Height">
<Grid x:Name="grid">
    <Grid.RowDefinitions>
        <RowDefinition x:Name="row0" Height="6*"/>
        <RowDefinition x:Name="row1" Height="4*"/>
    </Grid.RowDefinitions>
    <TextBox Grid.Row="0" x:Name="textBox" TextWrapping="Wrap" 
             HorizontalScrollBarVisibility="Auto" IsReadOnly="True" xml:space="preserve">
        Hallo
        Hallo
        Hallo
        </TextBox>
    <TextBlock Background="Red" Grid.Row="1"/>
</Grid>

2 个答案:

答案 0 :(得分:0)

为网格赋予高度或最小高度值:

<Grid x:Name="grid" MinHeight="100">
  ...
</Grid>

这不是一个错误:您将行设置为窗口高度的60%/ 40%,但也将窗口设置为其子项的大小(SizeToContent="Height")。

答案 1 :(得分:0)

您可能应该在SizeToContent事件中将Manual设置为Window.Loaded。这将允许框架确定窗口的正确大小,然后强制行正确计算高度。

private void Window_Loaded ( object sender , RoutedEventArgs e )
{
   SizeToContent = SizeToContent.Manual;
}