2009-07-30 18 views
2

Ich habe eine einfache XAML-Steuerung mit der folgenden Rasterzeilendefinition:Dynamische RowDefinition Höhe

<Grid.RowDefinitions> 
      <RowDefinition Height="15*" /> 
      <RowDefinition Height="60*" /> 
      <RowDefinition Height="20*" /> 
      <RowDefinition Height="20*" /> 
      <RowDefinition Height="15*" /> 
</Grid.RowDefinitions> 

Zeilen 1-3 hält jeweils einen Textblock, der nicht Text in ihm haben kann oder auch nicht. Im folgenden Code möchte ich die RowDefinition minimieren, wenn es keinen Text gibt. Ich habe nach dem in meinem Code im Wesentlichen hinter:

if(textblock.Text != ""){ 
    grid.RowDefinitions[elementRow].Height = new GridLength(20, GridUnitType.Star); 
} 
else{ 
    grid.RowDefinitions[elementRow].Height = new GridLength(0, GridUnitType.Star); 
} 

Ich mag Reihen 0 und 4 bleiben, wie sie in der XAML definiert sind. Leider funktioniert das nicht, obwohl im Textblock in Zeile 2 Text angezeigt wird.

Mache ich etwas falsch.

Jede Hilfe ist willkommen,

James

Antwort

9

Verwenden Sie den Stern-Notation nicht, verwenden Sie Auto für Ihre RowDefinitions. Wenn der TextBlock.Text leer ist, legen Sie die Sichtbarkeit des TextBlocks auf Visibility.Collapsed fest. Die Gitterreihe schrumpft dann automatisch zu nichts.

0

Sie können Ihre Artikel in ein UniformGrid mit Spalten = "1" setzen und die TextBox-Sichtbarkeit reduzieren, wenn Sie Text eingeben.

<UniformGrid Columns="1"> 
    <TextBlock Text="AAAA" Visibility="Collapsed" Grid.Row="0"/> 
    <TextBlock Text="BBBBB" Grid.Row="1"/> 
    <TextBlock Text="CCCCC" Grid.Row="2"/> 
    <TextBlock Text="DDDDD" Grid.Row="3"/> 
    <TextBlock Text="EEEE" Grid.Row="4"/> 
</UniformGrid> 
9

Dies ist nicht die Antwort auf Ihre Frage, nur ein paar Informationen.

Das * in der Höhe (oder Breite für Spalten) bedeutet, dass die Breite der Zeile (oder Spalte) Height = "*" (oder Width = "*") den Rest des Raumes einnehmen wird. Also, wenn Sie ein Raster mit 4 Zeilen in einem Raster mit height = „100“ haben, wenn Sie dies tun:

<Grid.RowDefinitions> 
      <RowDefinition Height="10" /> 
      <RowDefinition Height="10" /> 
      <RowDefinition Height="10" /> 
      <RowDefinition Height="*" /> 
</Grid.RowDefinitions> 

Die Zeilenbreite Height = „*“ wird 70 DIUs (geräteunabhängige Einheiten) sein.

eine Zahl vor dem Sternchen Hinzufügen (Height = „2 *“) funktioniert nur, wenn es mehr als eine Reihe des Sternchen verwenden, die Nummer vor dem Sternchen gibt an, wie viel mehr Platz wird, dass bestimmte Zeile nehmen (2 * = doppelt so viel, 3 * dreimal so viel, also weiter ...). IE:

<Grid.RowDefinitions> 
      <RowDefinition Height="10" /> 
      <RowDefinition Height="10" /> 
      <RowDefinition Height="2*" /> <!-- this row will be twice as tall as the one below --> 
      <RowDefinition Height="*" /> 
</Grid.RowDefinitions> 

Hier wird die 3. Reihe wird mit einer Höhe von 54 DIUs haben, wobei beide Höhen 80 Summe, die der Rest der ist (doppelt so viel wie die 4. Reihe, die eine Höhe von 26 DIUs hat ca..) Raum des Gitters (10 + 10 + 26 + 54 = 100, die Gitterhöhe).

Übrigens, ich stimme Charlie's Antwort.

Verwandte Themen