Різниця між Visibility.Clalased та Visibility.Hidden


287

У чому полягають відмінності між Visibility.Collapsedта Visibility.Hiddenу WPF?


4
Чи є різниця між прихованою та згорнутою виставою? Чи існує примірник об’єкта, який згортається?
Буллі

@Bulli Так, різниця в продуктивності, невидимий елемент керування все ще буде піддаватися пропуску компонування, тоді як згорнуте керування не буде розміщуватися. Так, наприклад, велика сітка може негативно впливати на продуктивність, коли її видимість невидима.
Маріус Герцог

Відповіді:


426

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

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

Згорнутий : не відображайте елемент і не залишайте місця для нього в макеті.

Приховано : не відображайте елемент, а резервуйте простір для елемента в макеті.

Видимо : відображення елемента.

Дивіться: http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx


2
Це означає, що ширина і висота керування будуть дорівнювати нулю, якщо вона була згорнута.
Саурон

27
Ну, що стосується планування, так. Звичайно, це більше, ніж встановлення ширини та висоти до нуля. Коли Видимість згортається, елемент керування не може мати фокус, ви не можете перейти до елемента керування за допомогою клавіші TAB etcetera, і все це все ще може, якщо вона матиме висоту і ширину нуля. Але знову ж таки, з точки зору розташування, ви можете це сказати.
Razzie

3
Я виявив, що використання прихованого (а потім і видимого) функції управління WebBrowser дає мені дуже непослідовні результати. Використання Collapsed (тоді Visible), здається, працює краще.
Тернар

це згорнуте керування, яке все ще "активне". Я використовую керування веб-браузером, але не хочу його показувати, однак мені потрібно, щоб переходити по різних сторінках і робити речі
програмне забезпечення це

У Chrome нам довелося використовувати <div style = "display: none">, щоб зникнути пробіл. "Згорнутий" - це не варіант видимості. "Згорнути" - цінність, але простір все ж був.
Праксителес

55

Видимість: Прихований проти згорнутого

Розглянемо наступний код , який показує тільки 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"/>

Прихований вихід:

Приховано

Так просто.


9

Незважаючи на трохи стару нитку, для тих, хто все ще шукає відмінності:

Окрім макета (простору), взятого у "Прихованому" та не взятого в "Згорнутий", є ще одна відмінність.

Якщо в цьому головному контролі "Згорнутий" є спеціальний елемент керування, наступного разу, коли ми встановимо його на Visible, він "завантажить" всі спеціальні елементи управління. Він не буде попередньо завантажений при запуску вікна.

Що стосується "Прихованого", він завантажить усі користувацькі елементи керування + основне управління, яке ми встановимо як приховане при запуску "вікна".


2
Я майже впевнений, що це неправильно. Моя поточна програма, здається, завантажує все, навіть якщо я встановив, що всі мої елементи керування будуть згорнуті.
Тім Польманн

1
Я зіткнувся з проблемою, що надходить із Collapsed. При використанні згортання, наприклад, Interaction.Behaviors не завантажується, поки видимість не буде змінена на Visible. Таким чином, якщо ви створюєте якийсь проксі-сервер, використовуючи поведінку для доступу до керування WPF з VM, це не буде працювати, поки контроль не буде встановлено як видимий (або прихований)
user2126375
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.