Tengo un formulario WPF simple con un Grid
declarado en el formulario. Esto Grid
tiene un montón de filas:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="30" />
<RowDefinition Height="Auto" Name="rowToHide" />
<RowDefinition Height="Auto" MinHeight="30" />
</Grid.RowDefinitions>
La fila nombrada rowToHide
contiene algunos campos de entrada y quiero ocultar esta fila después de detectar que no necesito estos campos. Es bastante simple configurar Visibility = Hidden
todos los elementos de la fila, pero la fila aún ocupa espacio en el Grid
. Intenté configurar Height = 0
los elementos, pero no pareció funcionar.
Puede pensarlo así: tiene un formulario, allí tiene un menú desplegable que dice "Tipo de pago", y si la persona selecciona "Efectivo", desea ocultar la fila que contiene los detalles de la Tarjeta. No es una opción comenzar el formulario con esto ya oculto.
Respuestas:
Row no tiene una propiedad de Visibilidad, por lo que, como han dicho otros, debe establecer la Altura. Otra opción es utilizar un convertidor, en caso de que necesite esta funcionalidad en muchas vistas:
Y luego en la vista apropiada
<Grid.RowDefinition>
:fuente
BoolToGridLengthConverter
y agregar unaVisibleLength
-Property, para regresar(bool)value == true
. Así es como también puede reutilizarlo conAuto
cualquier valor fijo.La mejor y más limpia solución para contraer filas o columnas es usar un DataTrigger, en su caso:
fuente
INotifyPropertyChanged
en su código para que funcione cuandoSomeBoolProperty
se cambie :).También puede hacer esto haciendo referencia a la fila en la cuadrícula y luego cambiando la altura de la fila.
XAML
VB.NET
Si bien el colapso de los elementos dentro de la cuadrícula también funciona, esto es un poco más simple si tiene muchos elementos en la cuadrícula que no tienen un elemento adjunto que pueda colapsarse. Esto proporcionaría una buena alternativa.
fuente
RowDefinition
, como<RowDefinition Height="*" /><!-- Height set in code behind -->
Como referencia,
Visibility
es una enumeración System.Windows.Visibility de tres estados :Vea esta sugerencia y otras sugerencias en el hilo de sugerencias y trucos de WPF .
fuente
En lugar de jugar con la fila de la cuadrícula, puede establecer la propiedad Visibilidad de los controles (campos en la fila) en "Contraído". Esto asegurará que los controles no ocupen ningún espacio y si tiene Grid Row Height = "Auto", entonces la fila se ocultará ya que todos los controles en la fila tienen Visibility = "Collapsed".
Este método es mejor porque la visibilidad de los controles se puede vincular a alguna propiedad con la ayuda de un convertidor.
fuente
Simplemente haz esto:
rowToHide.Height = new GridLength(0);
si va a usar,
visibility.Collapse
entonces debe configurarlo para cada miembro de la fila.fuente
Establezca la visibilidad del contenido de la fila en
Visibility.Collapsed
lugar de Oculto. Esto hará que el contenido deje de ocupar espacio y la fila se reducirá adecuadamente.fuente
Tuve una idea similar al heredar RowDefinition (solo por interés)
Ahora puede usarlo de la siguiente manera:
y alternar con
fuente