WPF笔记10——Visibility.Hidden和Visibility.Collapsed
在WPF中,Visibility.Hidden和Visibility.Collapsed在某些情况下看起来运行效果相似,但实际上有一些区别:
1、布局影响
Visibility.Collapsed:
当一个元素的Visibility属性被设置为Visibility.Collapsed时,该元素在布局过程中会被完全忽略。
就好像这个元素不存在一样,它不会占据任何空间。
例如,如果你有一个StackPanel里面包含了多个按钮,其中一个按钮的Visibility被设置为Visibility.Collapsed,那么在布局时,其他按钮会自动调整位置,填补这个按钮原本占据的空间。
Visibility.Hidden:
当一个元素的Visibility属性被设置为Visibility.Hidden时,该元素仍然会在布局中占据它原来的空间。
虽然它不可见,但它的空间仍然被保留。
例如,在一个Grid布局中,如果一个TextBox的Visibility被设置为Visibility.Hidden,那么这个TextBox所在的单元格仍然会为它保留空间,周围的元素位置不会发生改变。
2、性能和资源利用方面的潜在差异
Visibility.Collapsed:
由于元素在布局时被忽略,在某些复杂的布局场景下,使用Visibility.Collapsed可能会减少布局计算的工作量。
因为布局系统不需要考虑这个元素的大小和位置对其他元素的影响,这在一定程度上可以提高性能,尤其是当有大量元素并且频繁切换它们的可见性时。
Visibility.Hidden:
因为元素仍然占据空间,布局系统需要一直考虑它的存在,在布局计算上可能会消耗更多的资源。
不过,在一些情况下,你可能希望元素虽然不可见,但仍然保持它在布局中的位置,这种情况下Visibility.Hidden就是更合适的选择。
3、数据绑定和逻辑处理方面的差异
Visibility.Collapsed:
从数据绑定的角度来看,当元素被Collapsed时,与之相关的数据绑定(例如绑定到元素的属性或者命令)可能会受到影响。
因为元素在视觉树中被移除,一些依赖于元素存在的绑定可能会被中断或者重新评估。
Visibility.Hidden:
对于Visibility.Hidden的元素,数据绑定通常会继续正常工作,因为元素仍然在视觉树中,只是不可见。
这意味着绑定到该元素属性的其他元素或者视图模型中的属性更新仍然可以正常进行。