【WP开发】认清“不透明度”与“可见性”的区别
这两种情况,许多朋友平时都没有注意到:
1、设置Opacity属性的值为0;
2、将Visibility属性设置为Collapsed。
不少人会简单地认为这两种情况是一样的,都是让UI元素看不见。
我告诉你:非也,非也。如果你认为这两种情况是一样的话,就出现了误解,这样在实际开发中很容易出现困惑,尤其是开发自定义控件的时候。
那么,两种情况到底有何不同? 不用着急,通过一个非常简单的例子就能知道了。
比如以下XAML:
<Grid Width="300" Height="300">
<Image Source="Assets/1.jpg" Stretch="UniformToFill" Tapped="OnTapped"/>
<Border Background="Green" Opacity="0" />
</Grid>
在Grid中有两个子对象,Image位于底层,Border覆盖在Image上,注意一定要设置Border的Background属性,这样才能使元素的内部被画刷填充,否则这个例子就没有测试意义了。设置Border的背影为绿色,比较环保。然后再把它的Opacity属性设置为0,表示它是完全透明的。
那么,这样是不是表明Border元素已经隐藏了呢。不是的,为了验证这一点,处理了Image的Tapped事件,然后在事件处理代码的方法上打一个断点。如下图。

现在运行应用程序,你会发现,无论你怎么点击屏幕上的图片,Tapped事件都不会发生,即没有进入到上面所设置的断点处。
就算你用一阳指把屏幕点碎,也不会发生Tapped事件。
这是为啥呢?
虽然Opacity属性的值为0,Border已完全透明,但并不说明它就隐藏了,实际上它还在,只是我们看不见而已,同时因为Border元素是位于Image元素之上的,即Image被Border挡住了,你刚才所点击的其实是Border元素,而不是Image元素。
现在把代码改一下:
<Grid Width="300" Height="300">
<Image Source="Assets/1.jpg" Stretch="UniformToFill" Tapped="OnTapped"/>
<Border Background="Green" Visibility="Collapsed" />
</Grid>
Visibility="Collapsed"才真正把Border元素隐藏,所以现在运行程序后,点击屏幕上的图片,Tapped事件就会引发了。
通过以上极其简单的例子,可以发现:
将Opacity属性设置为0并不是真的隐藏了UI元素,也就是说它还是被呈现了的,但前提是元素要有填充画刷,如果不填充,那么元素的内部区域不会被绘制,这样就无法比较了。
而将Visibility属性设置为Collapsed会使得元素不在图形界面上呈现,即没有被绘制,自然就不会挡住下方的Image元素,这时候,Image的Tapped事件就能够发生。
总的一句话:“不透明度”为0是看不见而已,对象仍然被绘制的;只有将Visibility属性设置为Collapsed才能使对象真正隐藏。
其实,在WPF、SL中都是如此,因为Windows很多新的UI方案都可以认为是WPF的子集。故学好WPF就可以通杀了。
【WP开发】认清“不透明度”与“可见性”的区别的更多相关文章
- WP开发资源
wp开发:连续两次点击返回键退出程序的设计: http://hi.baidu.com/youngytj/item/6be317719cc371306cc37ce4 X http://www.cnblo ...
- WP开发笔记——WP7 SDK使用技巧
俗话说的好,工欲善其事,必先利其器. 入门WP开发之前,免不了要先接触开发环境和开发工具.使用WP7 SDK进行开发,我们需要掌握SDK的一些实用技巧,以便我们的开发. 一.开启/关闭电脑键盘输入 W ...
- 在知乎回答的一个问题:C#初学者以后往WP开发走,还是往unity3d走?哪个更有前景呢
问题原文:我是一个C#初学者,想问个问题,我以后是该往WP开发方向走呢还是学习Unity3D往游戏开发,哪个更有前景呢,个人感觉未来几年iOS,WP,Java会三足鼎立,WP现在有潜力,但是U3D现在 ...
- WP开发使用BingMaps地图服务
原文:WP开发使用BingMaps地图服务 WP8使用BingMaps地图在 SOAP服务如何计算路径 首先需要用到3个服务 1.GeoCode服务-转换地址到地理的经纬度(WebServices地址 ...
- WP 开发中.xaml 与.xaml.cs
关于 WP 开发中.xaml 与.xaml.cs 的关系 今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: ...
- volatile和synchronized实现内存可见性的区别
先看看synchronized实现内存可见性 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性.我们不仅希望防止某个线程正在使用对象状态而另一个 ...
- 系统不支持WP开发
好伤心,,,系统不支持WP开发... 买的ThinkPad S5 自带的win8,既不属于专业版,也不属于家庭版,,不属于各种版本. 其他条件都满足了.. 难道我要还系统吗??
- ***php进行支付宝开发中return_url和notify_url的区别分析
本文实例分析了php进行支付宝开发中return_url和notify_url的区别.分享给大家供大家参考.具体分析如下: 在支付宝处理业务中return_url,notify_url是返回些什么状态 ...
- asp.net简述WP开发模式
详情请参考菜鸟教程:http://www.runoob.com/aspnet/aspnet-tutorial.html 1.ASP.NET 是一个使用 HTML.CSS.JavaScript 和服务器 ...
随机推荐
- Java 用自带dom解析器遍历叶子节点内容
一.XML文件config.xml,内容如下: <?xml version="1.0" encoding="UTF-8" standalone=" ...
- 【Java】深深跪了,OJ题目Java与C运行效率对比(附带清华北大OJ内存计算的对比)
看了园友的评论之后,我也好奇清橙OJ是怎么计算内存占用的.重新测试的情况附在原文后边. -------------------------------------- 这是切割线 ----------- ...
- mavan 常用命令
Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通 ...
- LNMP 部署
一.防火墙配置 CentOS 7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.servic ...
- sshd 错误
140669086946976:error:0E079065:configuration file routines:DEF_LOAD_BIO:missing equal sign:conf_def. ...
- HTML5-属性
点击图片打开详细介绍页面
- Android BaseAdapter用法
BaseAdapter 适配器 BaseAdapter是一个抽象类,因此要写自已的适配器,段继承此类,并实现以下方法: @Overridepublic int getCount() { return ...
- 《利用Python进行数据分析》第123章学习笔记
引言 1 列表推导式 records = [json.loads(line) for line in open(path)] 这是一种在一组字符串(或一组别的对象)上执行一条相同操作(如json.lo ...
- C# 调用网易“易盾” Web API
易盾是网易推出的反垃圾云服务,最近准备试用一下,但发现api文档中只提供了Java, Python, PHP的示例代码,却没有C#的示例代码,于是参照Java示例代码用C#实现了一下. Java中用H ...
- 2015继续任性——不会Git命令,照样玩转Git
最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...