2010-10-20 8 views
1

Dans l'exemple suivant, il y a deux lignes Grid de hauteur 6* et 4*. Le problème est que seulement après que l'utilisateur change la taille de la fenêtre, la hauteur correcte des lignes est calculée. Cela se produit uniquement lorsque le drapeau SizeToContent est défini.
Des idées pourquoi? Comment puis-je forcer la fenêtre à calculer automatiquement la hauteur quand elle est chargée?Wpf La hauteur des lignes de grille n'est pas calculée correctement avec 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> 

+0

3,5 ou 4? Je pense qu'il y a quelques problèmes avec le calcul de la taille de la grille et des lignes dans 4. – Will

+0

Fondamentalement 2010/4, mais la même chose se produit en 2008/3.5. – Elad

+0

Dans le constructeur de la classe, vous pouvez définir le paramètre SizeToContent après le rendu à l'aide de Dispatcher. – Rachel

Répondre

0

Vous devez probablement définir SizeToContent sur Manual dans l'événement Window.Loaded. Cela permettra à l'infrastructure de déterminer la taille correcte de la fenêtre et de forcer ensuite les lignes à calculer correctement la hauteur.

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

Donnez la grille une valeur pour la hauteur ou MinHeight:

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

Ce n'est pas un bug: vous définissez les lignes à 60%/40% de la hauteur de la fenêtre, mais également définir la fenêtre pour se dimensionner à ses enfants (SizeToContent="Height").