Domanda

Ho un semplice controllo xaml con la seguente definizione Grid Row:

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

Le righe 1-3 contengono ciascuna un blocco di testo che può contenere o meno testo. Nel codice dietro voglio minimizzare RowDefinition se non c'è testo. Fondamentalmente ho il seguente codice nel mio codice:

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

Voglio che le righe 0 e 4 rimangano come sono definite in xaml. Purtroppo questo non funziona anche se nel blocco di testo è presente del testo nella riga 2 non viene visualizzato nulla.

Sto facendo qualcosa di sbagliato.

Qualsiasi aiuto è apprezzato

James

È stato utile?

Soluzione

Non usare la notazione a stella, usa Auto per le tue definizioni di riga. Se TextBlock.Text è vuoto, impostare Visibilità di TextBlock su Visibility.Collapsed. La riga della griglia si ridurrà automaticamente a nulla.

Altri suggerimenti

Questa non è la risposta alla tua domanda, solo alcune informazioni.

Il * in Altezza (o larghezza per le colonne) indica che la larghezza di riga (o colonna) Altezza = " * " (o Larghezza = " * ") occuperà il resto dello spazio. Quindi se hai una griglia con 4 righe in una griglia con Height = " 100 " ;, se lo fai:

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

La larghezza della riga Altezza = " * " saranno 70 DIU (unità indipendenti dal dispositivo).

L'aggiunta di un numero prima dell'asterisco (Altezza = " 2 * ") funziona solo se ci sono più righe usando l'asterisco, il numero prima dell'asterisco indica quanto più spazio occuperà quella riga specifica (2 * = il doppio, 3 * il triplo, ecc ...). 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>

Qui la 3a fila avrà un'altezza di 54 DIU (il doppio della 4a fila che ha un'altezza di 26 DIU circa), entrambe le altezze sommano 80, che è il resto dello spazio della griglia (10 + 10 + 26 + 54 = 100, l'altezza della griglia).

A proposito, sono d'accordo con la risposta di Charlie.

Puoi inserire i tuoi oggetti in UniformGrid con Columns = " 1 " E rendere la visibilità TextBox al collasso quando si ottiene un testo emptry.

 <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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top