【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 和服务器 ...
随机推荐
- linux下 tar解压 gz解压 bz2等各种解压文件使用方法
http://alex09.iteye.com/blog/647128 大致总结了一下linux下各种格式的压缩包的压缩.解压方法. .tar 解包:tar xvf FileName.tar 打包:t ...
- (转)详解Linux Top 命令
top 命令是最流行的性能监视工具之一,我们必需了解.它是一个优秀的交互式工具,用于监视性能.它提供系统整体性能,但报告进程信息才是 top 命令的长处.top 命令交互界面如下图所视:
- (01背包变形) Cow Exhibition (poj 2184)
http://poj.org/problem?id=2184 Description "Fat and docile, big and dumb, they look so stupid ...
- Core Audio(三)
音频终端设备(Audio Endpoint Devices) endpoint device指的是应用程序的数据通道上起始或终止的硬件设备,如扬声器,耳机,话筒等:沿着数据通道可能穿越一定数目的硬件和 ...
- testng参数化(提供测试数据)【转】
testng提供测试数据的两个注释:@DataProvide和@Parameter 一.通过testng.xml中设置参数 (实际上testng.xml只是一个名字,可以起任何一个名字,只要是.x ...
- Individual Project - Word frequency program - Multi Thread And Optimization
作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...
- 从头安装及配置PL/SQL Developer
原文地址:http://lightguide.blog.51cto.com/3121539/1140588 因为自己安装及配置中走了不少弯路,搜索网上的文档大部分没有包含oralce client的安 ...
- Git撤销提交
本文链接:http://volnet.github.io/#!docs/git/reset-to-old-version.md 在使用Git进行版本管理的时候,经常会遇到一些错误的提交. 在开始演示之 ...
- 记一次troubleshooting(一):奇慢的脚本
背景: 事情发生的时间是几年前,那时刚从windows server运维的部门调动过来,对linux和数据库还是处于一知半解的状态. 领导找过来说:前任遗留下来的问题你来调查一下,有个客户说他们的日次 ...
- 我的ORM之二--添加
我的ORM索引 添加的语法: var 影响行数 = dbr.表.Insert(实体).Execute(); 实体类型 1. 任何C#类. 如:public class Entity{ public ...