Tengo un formulario WPF simple con un Griddeclarado en el formulario. Esto Gridtiene 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 rowToHidecontiene algunos campos de entrada y quiero ocultar esta fila después de detectar que no necesito estos campos. Es bastante simple configurar Visibility = Hiddentodos los elementos de la fila, pero la fila aún ocupa espacio en el Grid. Intenté configurar Height = 0los 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
BoolToGridLengthConvertery agregar unaVisibleLength-Property, para regresar(bool)value == true. Así es como también puede reutilizarlo conAutocualquier valor fijo.La mejor y más limpia solución para contraer filas o columnas es usar un DataTrigger, en su caso:
fuente
INotifyPropertyChangeden su código para que funcione cuandoSomeBoolPropertyse 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,
Visibilityes 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.Collapseentonces debe configurarlo para cada miembro de la fila.fuente
Establezca la visibilidad del contenido de la fila en
Visibility.Collapsedlugar 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