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

Sau*_*ron 274 wpf visibility wpf-controls

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

Raz*_*zie 413

不同之处在于Visibility.Hidden隐藏了控件,但保留了它在布局中占用的空间.因此它呈现空白而不是控件. Visibilty.Collapsed不渲染控制不保留空白.控制所采取的空间是"崩溃",因此得名.

来自MSDN的确切文本:

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

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

可见:显示元素.

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

  • 那么,就布局而言,是的.它当然不仅仅是将宽度和高度设置为零.折叠可见性时,控件无法聚焦,您无法使用TAB键等导航到控件,如果它的高度和宽度为零,则所有这些都可以.但同样,就布局而言,你可以这么说. (27认同)
  • 我发现在WebBrowser控件中使用Hidden(然后是Visible)会给我带来非常不一致的结果.使用Collapsed(然后可见)似乎工作得更好. (3认同)
  • 这意味着如果控件处于折叠状态,则其宽度和高度将设置为零。 (2认同)

Kyl*_*Ren 53

可见性:隐藏的Vs崩溃

考虑下面的代码仅示出了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>
Run Code Online (Sandbox Code Playgroud)

输出折叠:

倒塌

现在改变第二Label visibilityHiddden.

<Label Width="50" Content="Second" Visibility="Hidden"/>
Run Code Online (Sandbox Code Playgroud)

输出隐藏:

隐

就如此容易.


scs*_*dev 8

即使有点老线程,对于那些仍在寻找差异的人:

除了在隐藏中拍摄的布局(空格)而不是在折叠中拍摄时,还有另一个区别.

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

对于"隐藏",它将加载所有自定义控件+主控件,我们在"窗口"启动时将其设置为隐藏.

  • 我很确定这是错误的。即使将所有控件设置为折叠,我当前的应用程序似乎也可以加载所有内容。 (2认同)