WPF里枚举变量Visibility 有三个值:Visible, Collapsed和Hidden。其中Collapsed是WPF新引进的,其作用是不仅隐去Control,同时也会移除Control所占据的空间。这个属性在你需要隐藏某个控件的同时又让界面看起来统一齐整时非常有效。

一般来说,使用Hidden和Collapsed隐藏控件都是可行的。但是在实际的开发过程中,我发现两者还是有不少区别的,尤其在某些特定的环境里。如果使用过程中不注意,可能会造成不可预见的后果。

我开发过一个程序,主界面的Xaml布局大概如下:

在后台代码中,A和B会相互切换,隐去A显示B或显示B隐去A。如果隐去的时候设置的枚举值是Collapsed,我发现在切换的过程中,A或B的界面显示会有问题,具体表现为其长度超出了原先设想的限制范围。跟踪的时候发现Windows的重载函数MeasureOverride和ArrangeOverride被调用,而且其参数就已经有问题了。分析认为,如果一个控件被设置成Collapsed,重新显示的时候,Render Engine就会重新计算A或B里控件的位置和大小,造成不可预知的结果。如果设成Hidden,因为控件所占的位置没有被移除,重新显示的时候就不需要计算这些数值,也就可以避免以上不良后果。

另外一个问题涉及到508(高亮对比,针对色盲人士)。如果控件设置成了Collapsed,多次设置高对比度后,该控件没法正常显示,其位置为黑色,重启程序方能解决。设置成hidden就不会有这个问题。

本文来自

http://blog.csdn.net/qian_xu/article/details/6191900

WPF之路五:wpf 隐藏与显示 Visibility的更多相关文章

  1. [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口

    原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我 ...

  2. WPF自定义控件(五)の用户控件(完结)

    用户控件,WPF中是继承自UserControl的控件,我们可以在里面融合我们的业务逻辑. 示例:(一个厌恶选择的用户控件) 后端: using iMicClassBase; using iMicCl ...

  3. WPF之路-键盘与鼠标事件 - 简书

    原文:WPF之路-键盘与鼠标事件 - 简书 键盘事件 事件类型分为以下几个类型 生命周期事件:在元素加载与卸载的时候发生 鼠标事件:鼠标动作 键盘事件:键盘动作 手写笔事件:适用于win7以上的系统 ...

  4. WPF之路——实现自定义虚拟容器(实现VirtualizingPanel)

    原文:WPF之路--实现自定义虚拟容器(实现VirtualizingPanel) 源码下载地址: http://download.csdn.net/detail/qianshen88/6618033 ...

  5. WPF中的ListBox实现按块显示元素的方法

    本文实例讲述了WPF中的ListBox实现按块显示元素的方法.分享给大家供大家参考,具体如下: 注意:需要设置ListBox的属性 ScrollViewer.HorizontalScrollBarVi ...

  6. 在WPF中实现图片一边下载一边显示

    原文 在WPF中实现图片一边下载一边显示 当我们上网查看一个较大的图片时,浏览器能一边下载一边显示,这样用户体验是比较好的,但在WPF程序中,当我们通过如下方式显示一幅图片时: img.Source ...

  7. WPF通过不透明蒙板切割显示子控件

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/Backspace110/article/ ...

  8. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...

  9. 我的VSTO之路(五):Outlook初步开发之联系人扩展

    原文:我的VSTO之路(五):Outlook初步开发之联系人扩展 上一讲我们完成对Word的介绍,文本开始,我将着重介绍Outlook.Outlook是微软Office中一个非常实用的工具,尤其在一个 ...

随机推荐

  1. 《经久不衰的Spring框架:@ResponseBody 中文乱码》

    问题背景 本文并不是介绍@ResponseBody注解,也不是中文乱码问题的大汇总笔记,这些网上都有很多内容了.这边仅对几年前,一个卡壳了挺久时间的问题的解决过程做一个记录,以警惕自己,达到自醒得目的 ...

  2. android学习1——LinearLayout

    用linearLayout,上面放4个按钮,不作任何设置.xml文件内容如下: <?xml version="1.0" encoding="utf-8"? ...

  3. 每日java基础知识(01)

    1.java语言的主要特点. 跨平台性:一个应用可以不经过修改,就直接在不同的平台上运行. 面向对象:java是面向对象的语言,可以使用对象封装事物的属性和行为,可以使用面向对象的思想进行分析设计,并 ...

  4. Debian部署RMI异常:java.rmi.ConnectException: Connection refused to host: 127.0.1.1;

    现象:在windows上部署RMI很顺利,但移到debian上部署后,客户端报异常: java.rmi.ConnectException: Connection refused to host: 12 ...

  5. Java面试03|并发及锁

    1.synchronized与Lock的区别 使用synchronized这个关键字实现的同步块有一些缺点: (1)锁只有一种类型 (2)线程得到锁或者阻塞 (3)Lock是在Java语言层面基于CA ...

  6. JSP中列表展示,隔行变色以及S标签的使用

    1.java代码 /** * 列表展示,隔行变色以及S标签的使用 * * @return */ public String list() { List<User> list = new A ...

  7. Asp.net MVC 视图使用像Ajax,ViewBag提示为找到上下文

    不知是什么原因,所有的视图中Ajax,ViewBag之类的都提示为找到上下文(由于换了个版本Vs,猜测应该是Vs的原因),然后顺利在网上找到了解决方案. 给地址链接:https://social.ms ...

  8. 加入大型的js文件如jQuery文件,Eclipse会报错

    在使用Eclipse3.7及以后的版本的时候,加入大型的js文件如jQuery文件,会报错(missing semicolon),文件中会显示红色小X,虽然这个错误并不会影响项目的运行,但是这个却会大 ...

  9. vue学习笔记(一)关于事件冒泡和键盘事件 以及与Angular的区别

    一.事件冒泡 方法一.使用event.cancelBubble = true来组织冒泡 <div @click="show2()"> <input type=&q ...

  10. dfs 无向图两节点间的所有路径

    标题:风险度量 X星系的的防卫体系包含 n 个空间站.这 n 个空间站间有 m 条通信链路,构成通信网.两个空间站间可能直接通信,也可能通过其它空间站中转. 对于两个站点x和y (x != y), 如 ...