Pregunta

Tengo un simple control xaml con la siguiente definición de fila de cuadrícula:

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

Cada una de las filas 1-3 contiene un bloque de texto que puede o no tener texto. En el código que hay detrás, quiero minimizar la definición de fila si no hay texto. Esencialmente tengo lo siguiente en mi código:

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

Quiero que las filas 0 y 4 permanezcan como están definidas en el xaml. Desafortunadamente, esto no funciona, aunque no hay texto en el bloque de texto en la fila 2.

¿Estoy haciendo algo mal?

Cualquier ayuda es apreciada,

James

¿Fue útil?

Solución

No use la notación en estrella, use Auto para sus definiciones de fila. Si el TextBlock.Text está vacío, configure la Visibilidad del TextBlock en Visibility.Collapsed. La fila de la cuadrícula se reducirá automáticamente a nada.

Otros consejos

Esta no es la respuesta a tu pregunta, solo un poco de información.

El * en el Alto (o ancho para columnas) significa que el ancho de la fila (o columna) Alto = " * " (o Ancho = " * ") ocupará el resto del espacio. Por lo tanto, si tiene una cuadrícula con 4 filas en una cuadrícula con Altura = " 100 " ;, si hace esto:

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

Altura de ancho de fila = " * " serán 70 DIUs (unidades independientes del dispositivo).

Agregar un número antes del asterisco (Altura = " 2 * ") solo funciona si hay más de una fila usando el asterisco, el número antes del asterisco indica cuánto más espacio tomará esa fila específica (2 * = el doble, 3 * tres veces más, etcétera ...). 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>

Aquí, la tercera fila tendrá una altura de 54 DIU (el doble que la cuarta fila que tiene una altura de 26 DIU aproximadamente), ambas alturas suman 80, que es el resto del espacio de la cuadrícula (10 + 10 + 26 + 54 = 100, la altura de la cuadrícula).

Por cierto, estoy de acuerdo con la respuesta de Charlie.

Puedes poner tus artículos dentro de un UniformGrid con Columnas = " 1 " Y haga que la Visibilidad del cuadro de texto se contraiga cuando reciba texto de respuesta.

 <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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top