В чем разница между Visibility.Collapsed
и Visibility.Hidden
в WPF?
Разница между видимостью .Collapsed и Visibility.Hidden
Ответ 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>
Сброс вывода:
Теперь измените второй Label
visibility
на Hiddden
.
<Label Width="50" Content="Second" Visibility="Hidden"/>
Сбой вывода:
Проще всего.
Ответ 3
Даже если немного старый поток, для тех, кто все еще ищет различия:
Помимо макета (пробела), сделанного в Hidden и не взятого в Collapsed, есть еще одна разница.
Если у нас есть настраиваемые элементы управления внутри этого основного элемента управления "Свернутый", в следующий раз, когда мы установим его в Visible, он "загрузит" все пользовательские элементы управления. Он не будет загружаться при запуске окна.
Что касается "Скрытого", он загрузит все пользовательские элементы управления + основной элемент управления, который мы устанавливаем как скрытые, когда запускается "окно".