Frage

Ich habe eine einfache XAML-Steuerung mit der folgenden Grid Row Definition:

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

Zeilen 1-3 halten jeweils einen Textblock, der nicht Text in ihm haben kann oder auch nicht. In der Code-behind Ich möchte die RowDefinition minimieren, wenn kein Text ist. Ich habe folgend 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 Zeilen 0 und 4 bleiben, wie sie in der XAML definiert sind. Leider dies auch dann nicht funktioniert, obwohl es Text im Textblock auf Zeile 2 nichts angezeigt wird.

Bin ich etwas falsch zu machen.

Jede Hilfe ist willkommen,

James

War es hilfreich?

Lösung

Sie die Stern-Notation nicht verwenden, verwenden Sie Auto für Ihre RowDefinitions. Wenn die TextBlock.Text leer ist, stellen Sie die Sichtbarkeit des Textblock zu Visibility.Collapsed. Die Startreihe wird dann schrumpfen automatisch zu nichts.

Andere Tipps

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

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

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

Die Zeilenbreite height = "*" 70 sein wird DIUs (geräteunabhängige Einheiten).

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 * = zweimal so viel, 3 * dreimal so viel, so weiter ...). I. E:.

<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 ist die 3. Reihe wird mit einer Höhe von 54 DIUs hat (doppelt so viel wie die 4. Reihe, die eine Höhe von 26 DIUs hat.), Wobei beide Höhen 80 Summe, die der Rest des Platzes des Gitters (10 + 26 + 10 + 54 = 100, die Gitterhöhe).

BTW, ich bin einverstanden mit Charlie Antwort.

Sie können Ihre Artikel innerhalb eines Uniform setzen mit Columns = "1" und die TextBox Sichtbarkeit machen kollabiert, wenn Sie emptry Text erhalten.

 <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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top