Высота строк сетки Wpf неправильно рассчитывается с SizeToContent - PullRequest
1 голос
/ 20 октября 2010

В следующем примере есть две строки 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 голосов
/ 20 октября 2010

Вероятно, вам следует просто установить SizeToContent на Manual в событии Window.Loaded.Это позволит каркасу определить правильный размер окна, а затем принудительно заставить строки правильно рассчитать высоту.

private void Window_Loaded ( object sender , RoutedEventArgs e )
{
   SizeToContent = SizeToContent.Manual;
}
0 голосов
/ 20 октября 2010

Дайте Grid значение для высоты или минимальной высоты:

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

Это не ошибка: вы устанавливаете строки равными 60% / 40% высоты окна, но также устанавливаете размер окна в соответствии с его дочерними (SizeToContent="Height").

...