【问题标题】:Difference between Visibility.Collapsed and Visibility.HiddenVisibility.Collapsed 和 Visibility.Hidden 之间的区别
【发布时间】:2010-10-27 13:39:52
【问题描述】:

WPF 中Visibility.CollapsedVisibility.Hidden 有什么区别?

【问题讨论】:

  • 隐藏和折叠之间是否存在性能差异?是否有折叠对象的实例?
  • @Bulli 是的,存在性能差异,不可见的控件仍将受到布局传递的影响,而折叠的控件将不会被布局。因此,例如,当其可见性不可见时,大型网格会对性能产生负面影响。

标签: wpf wpf-controls visibility


【解决方案1】:

不同的是Visibility.Hidden隐藏了控件,但保留了它在布局中占据的空间。所以它呈现空白而不是控件。 Visibilty.Collapsed 不呈现控件并且不保留空白。控件占用的空间是“折叠的”,因此得名。

来自 MSDN 的确切文本:

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

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

可见:显示元素。

见:http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx

【讨论】:

  • 这意味着如果控件处于折叠状态,它的宽度和高度将设置为零。
  • 嗯,就布局而言,是的。它当然不仅仅是将宽度和高度设置为零。当 Visibility 折叠时,控件无法获得焦点,您无法使用 TAB 键导航到控件等,如果它的高度和宽度为零,所有这些仍然可以。但同样,在布局方面,你可以这么说。
  • 我发现在 WebBrowser 控件中使用 Hidden(然后是 Visible)会给我带来非常不一致的结果。使用 Collapsed(然后是 Visible)似乎效果更好。
  • 是一个仍处于“活动”状态的折叠控件。我正在使用网络浏览器控件,但不想显示它,但是我需要它来导航不同的页面并做一些事情
  • 在 Chrome 中,我们必须使用
    让空白消失。 “折叠”不是可见性选项。 “折叠”是一个值,但空间仍然存在。
【解决方案2】:

可见性:隐藏与折叠

考虑以下代码,它只显示 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 visibility 更改为 Hiddden

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

输出隐藏:

就这么简单。

【讨论】:

    【解决方案3】:

    虽然有点老了,但对于那些仍在寻找差异的人来说:

    除了在 Hidden 和 Collapsed 中采用的布局(空间)之外,还有另一个区别。

    如果我们在这个 'Collapsed' 主控件中有自定义控件,下次我们将其设置为 Visible 时,它​​将“加载”所有自定义控件。窗口启动时不会预加载。

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

    【讨论】:

    • 我很确定这是错误的。即使我将所有控件都设置为折叠状态,我当前的应用程序似乎也会加载所有内容。
    • 我正面临来自 Collapsed 的问题。当使用折叠时,例如在 Visibility 更改为 Visible 之前,不会加载 Interaction.Behaviors。因此,如果您使用行为创建某种代理以从 VM 访问 WPF 控件,则在控件设置为可见(或隐藏)之前,这将不起作用
    • 我也对此进行了基准测试,发现折叠的 DataGrid 确实加载了数据!
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    • 2011-02-18
    • 2019-12-21
    相关资源
    最近更新 更多