Visibility.Collapsed和Visibility.Hidden之间的区别


286

Visibility.CollapsedVisibility.HiddenWPF 之间有什么区别?


4
隐藏和崩溃之间是否存在性能差异?是否存在折叠对象的实例?
布利

@Bulli是的,两者之间存在性能差异,不可见控件仍将受到布局过程的约束,而折叠控件将不会进行布局。因此,例如,当一个大网格的“可见性”为“不可见”时,可能会对性能产生负面影响。
Marius Herzog

Answers:


425

区别在于Visibility.Hidden隐藏控件,但保留其在布局中占用的空间。因此,它呈现空白而不是控件。 Visibilty.Collapsed不呈现控件也不保留空白。控件将占用的空间为“折叠”,因此为名称。

来自MSDN的确切文本:

折叠:不显示元素,也不在布局中为其保留空间。

隐藏:不显示元素,但在布局中为元素保留空间。

可见:显示元素。

请参阅:http : //msdn.microsoft.com/en-us/library/system.windows.visibility.aspx


2
这意味着如果控件处于折叠状态,则其宽度和高度将设置为零。
索隆,

27
好吧,就布局而言,是的。当然,它所做的不只是将宽度和高度设置为零。当“可见性”折叠时,该控件将无法获得焦点,您无法使用TAB键等导航到该控件,如果高度和宽度为零,则所有这些控件仍然可以。但是,就布局而言,您可以这样说。
拉齐

3
我发现将隐藏(然后可见)与WebBrowser控件一起使用会给我带来非常不一致的结果。使用折叠(然后可见)效果更好。
2012年

已折叠的控件仍处于“活动状态”。我正在使用Web浏览器控件,但不想显示它,但是我需要它来浏览其他页面并进行操作
软件很有趣

在Chrome中,我们必须使用<div style =“ display:none”>来使空白消失。“塌陷”不是可见性选项。“折叠”是一个值,但是空间仍然存在。
Praxiteles

55

可见性:隐藏与折叠

考虑以下代码,该代码仅显示three Labels,第二个Label visibilityCollapsed

 <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 visibilityHiddden

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

隐藏的输出:

隐

就如此容易。


9

即使线程有些陈旧,对于仍在寻找差异的人:

除了“隐藏”中采用的布局(空间)而不是“折叠”中采用的布局(空间)外,还有另一个区别。

如果在此“折叠”主控件中有自定义控件,则下次将其设置为“可见”时,它将“加载”所有自定义控件。启动窗口时不会预加载。

至于“隐藏”,它将加载“窗口”启动时我们设置为隐藏的所有自定义控件+主控件。


2
我敢肯定这是错误的。即使将所有控件都设置为折叠,我当前的应用程序似乎也可以加载所有内容。
蒂姆·波曼

1
我正面临来自“崩溃”的问题。使用折叠时,例如,Interaction.Behaviors不会加载,直到“可见性”更改为“可见”。因此,如果您使用行为创建某种代理来从VM访问WPF控件,则只有在将控件设置为可见(或隐藏)后,该代理才能起作用
user2126375 16-10-12
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.