Diferencia entre Visibilidad contraída y Visibilidad oculta


287

¿Cuáles son las diferencias entre Visibility.Collapsedy Visibility.Hiddenen WPF?


44
¿Hay un rendimiento diferente entre oculto y colapsado? ¿Hay una instancia para el objeto que está colapsado?
Bulli

@Bulli Sí, hay una diferencia de rendimiento, un control invisible seguirá estando sujeto al pase de diseño, mientras que un control contraído no se distribuirá. Entonces, por ejemplo, una cuadrícula grande puede afectar negativamente el rendimiento cuando su visibilidad es invisible.
Marius Herzog

Respuestas:


426

La diferencia es que Visibility.Hiddenoculta el control, pero reserva el espacio que ocupa en el diseño. Entonces representa espacios en blanco en lugar del control. Visibilty.Collapsedno 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 del MSDN:

Contraído : no muestre el elemento y no le reserve espacio en el diseño.

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

Visible : muestra el elemento.

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


2
Eso significa que el ancho y la altura del control se establecerán en cero si estaba contraído.
Sauron

27
Bueno, en términos de diseño, sí. Por supuesto, hace más que establecer el ancho y la altura en cero. Cuando se colapsa la visibilidad, el control no puede tener el foco, no puede navegar al control usando la tecla TAB, etcétera, todo lo cual aún puede tener una altura y un ancho de cero. Pero de nuevo, en términos de diseño, se podría decir eso.
Razzie

3
Descubrí que usar Oculto (y luego Visible) con el control WebBrowser me da resultados muy inconsistentes. Usar Contraído (luego Visible) parece funcionar mejor.
Ternario

es un control colapsado aún "activo". Estoy usando un control de navegador web pero no quiero mostrarlo, sin embargo, lo necesito para navegar por diferentes páginas y hacer cosas
software es divertido el

En Chrome, tuvimos que usar <div style = "display: none"> para que desapareciera el espacio en blanco. "Contraído" no es una opción de visibilidad. "Colapso" es un valor, pero el espacio todavía estaba allí.
Praxiteles

55

Visibilidad: Oculto vs. Contraído

Considere seguir el código que solo muestra three Labelsy tiene el segundo Label visibilitycomo 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 contraída:

Colapsado

Ahora cambia el segundo Label visibilitya Hiddden.

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

Salida oculta:

Oculto

Tan sencillo como eso.


9

Aunque es un hilo un poco viejo, para aquellos que aún buscan las diferencias:

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

Si tenemos controles personalizados dentro de este control principal 'Contraído', la próxima vez que lo configuremos en 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".


2
Estoy bastante seguro de que esto está mal. Mi aplicación actual parece cargar todo, incluso si configuro todos mis controles para colapsar.
Tim Pohlmann

1
Estoy enfrentando un problema que viene de colapsado Cuando se usa contraído, por ejemplo, Interacción. Los comportamientos no se cargan hasta que Visibilidad se cambie a Visible. Por lo tanto, si crea algún tipo de proxy utilizando comportamientos para acceder al control WPF desde VM, esto no funcionará hasta que el control esté configurado como Visible (u Oculto)
user2126375
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.