web-dev-qa-db-fra.com

Différence entre Visibility.Collapsed et Visibility.Hidden

Quelles sont les différences entre Visibility.Collapsed et Visibility.Hidden dans WPF?

268
Sauron

La différence est que Visibility.Hidden cache le contrôle, mais réserve l'espace qu'il occupe dans la présentation. Donc, il rend les espaces blancs au lieu du contrôle. Visibilty.Collapsed ne rend pas le contrôle et ne réserve pas les espaces. L'espace que le contrôle prendrait est "réduit", d'où son nom.

Le texte exact du MSDN:

Réduit : ne pas afficher l'élément et ne pas lui réserver d'espace dans la présentation.

Caché : ne pas afficher l'élément, mais réserver de l'espace pour cet élément dans la présentation.

Visible : Affiche l'élément.

Voir: http://msdn.Microsoft.com/en-us/library/system.windows.visibility.aspx

404
Razzie

Visibilité: Vs cachés réduits

Considérez le code suivant qui ne montre que three Labels et a la seconde Labelvisibility comme 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>
_

Sortie réduite:

Collapsed

Remplacez maintenant le second Labelvisibility par Hiddden.

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

Sortie masquée:

Hidden

Aussi simple que cela.

51
Kylo Ren

Même si c'est un peu vieux fil, pour ceux qui cherchent encore les différences:

Mis à part la disposition (espace) prise dans Caché et non prise dans Collapsed, il y a une autre différence.

Si nous avons des contrôles personnalisés dans ce contrôle principal 'Collapsed', la prochaine fois que nous le définirons à Visible, il "chargera" tous les contrôles personnalisés. Il ne sera pas pré-chargé au démarrage de la fenêtre.

Quant à 'Caché', il chargera tous les contrôles personnalisés + le contrôle principal que nous avons défini comme masqué au démarrage de la "fenêtre".

8
scsfdev