Разница между видимостью .Collapsed и Visibility.Hidden

В чем разница между Visibility.Collapsed и Visibility.Hidden в WPF?

Ответ 1

Разница в том, что Visibility.Hidden скрывает элемент управления, но сохраняет пространство, которое занимает место в макете. Таким образом, вместо элемента управления он отображает пробелы. Visibilty.Collapsed не отображает элемент управления и не сохраняет пробелы. Пространство, которое будет выполняться элементом управления, будет "скомпенсировано", отсюда и название.

Точный текст из MSDN:

Свернутый: не отображать элемент и не оставлять место для него в макете.

Скрытый: не отображать элемент, а зарезервировать место для элемента в макете.

Видимый. Отобразите элемент.

Смотрите: http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx

Ответ 2

Видимость: спрятанное Vs скроено

Рассмотрим следующий код, который показывает только three Labels и имеет второй Label visibility как 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>

Сброс вывода:

Collapsed

Теперь измените второй Label visibility на Hiddden.

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

Сбой вывода:

Скрытый

Проще всего.

Ответ 3

Даже если немного старый поток, для тех, кто все еще ищет различия:

Помимо макета (пробела), сделанного в Hidden и не взятого в Collapsed, есть еще одна разница.

Если у нас есть настраиваемые элементы управления внутри этого основного элемента управления "Свернутый", в следующий раз, когда мы установим его в Visible, он "загрузит" все пользовательские элементы управления. Он не будет загружаться при запуске окна.

Что касается "Скрытого", он загрузит все пользовательские элементы управления + основной элемент управления, который мы устанавливаем как скрытые, когда запускается "окно".