wpf wpf-controls visibility

wpf - Diferencia entre Visibility.Collapsed y Visibility.Hidden



wpf-controls (3)

¿Cuáles son las diferencias entre Visibility.Collapsed y Visibility.Hidden en WPF?


Aunque es un hilo un poco viejo, para aquellos que todavía buscan las diferencias:

Aparte del diseño (espacio) tomado en Oculto y no tomado en Colapsado, hay otra diferencia.

Si tenemos controles personalizados dentro de este control principal ''Contraído'', la próxima vez que lo configuremos como Visible, "cargará" todos los controles personalizados. No se cargará previamente cuando se inicie la ventana.

En cuanto a ''Oculto'', cargará todos los controles personalizados + control principal que configuramos como ocultos cuando se inicia la "ventana".


La diferencia es que Visibility.Hidden oculta el control, pero reserva el espacio que ocupa en el diseño. Así que hace que los espacios en blanco en lugar del control. Visibilty.Collapsed no representa el control y no reserva el espacio en blanco. El espacio que tomaría el control está ''colapsado'', de ahí el nombre.

El texto exacto de la MSDN:

Contraído : no muestra el elemento y no reserva espacio para él en el diseño.

Oculto : no muestra el elemento, pero reserva espacio para el elemento en el diseño.

Visible : Muestra el elemento.

Consulte: http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx


Visibilidad: Oculto Vs Contraído

Considere el siguiente código que solo muestra three Labels y tiene una visibility segunda Label como Collapsed :

<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center"> <StackPanel.Resources> <Style TargetType="Label"> <Setter Property="Height" Value="30" /> <Setter Property="Margin" Value="0"/> <Setter Property="BorderBrush" Value="Black"/> <Setter Property="BorderThickness" Value="1" /> </Style> </StackPanel.Resources> <Label Width="50" Content="First"/> <Label Width="50" Content="Second" Visibility="Collapsed"/> <Label Width="50" Content="Third"/> </StackPanel>

Salida colapsada:

Ahora cambia la visibility la segunda Label a Hiddden .

<Label Width="50" Content="Second" Visibility="Hidden"/>

Salida oculta:

Tan sencillo como eso.