博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
值得注意的IsHitTestVisible
阅读量:6293 次
发布时间:2019-06-22

本文共 2591 字,大约阅读时间需要 8 分钟。

原文:

这个属性我们平时可能并不怎么用.先来看下MSDN上的解释:

解释的非常专业,然而我并没有看懂.

说说我的理解吧:把这个属性设置为false,看起来没有变化,但操作上已经把他完全忽视了,不触发事件,可以直接点到它下面的东西.

 

这个属性能方便的解决工作中常见的麻烦,比如下面这个例子:

注意上面那部分.效果很简单,就是个渐变的效果.但是这个渐变贯穿了两列,就使得处理起来有点小麻烦.

当然解决方案有很多:

可以写两个ListBoxItem的样式,第一个放顶部有渐变的背景,和右部保持一致,通过样式选择器来实现.这显然比较麻烦.

还可以在大背景下放个渐变,ListBoxItem的上半部分做成透明,这样相对简单,但不一定能实现理想的效果.

 

IsHitTestVisible属性就很好的解决了这个问题.直接在上层放个border,背景设置成渐变,IsHitTestVisible设置为false.这样就既能看到渐变效果,又能透过border,直接点到ListBoxItem.设置一个属性就解决了问题,非常方便.相当于在上面放了个蒙板,但是这个蒙板能看到却点不到.

 

类似的我还想到了一个场景:

 

这个效果顶层是个图片,IsHitTestVisible为false,透明为0.3.

并不是图片是个背景,然后所有控件都是半透明效果.

见代码:

 XMAL:

 

后台:

  

private void StackPanel_Click(object sender, RoutedEventArgs e)        {            Button btn = (Button)e.OriginalSource;            string content = btn.Content.ToString();            if (content == "金闪闪")            {                img.Source = new BitmapImage(new Uri(@"/Image/jinshanshan.png", UriKind.Relative));            }            if (content == "小圆")            {                img.Source = new BitmapImage(new Uri(@"/Image/jinshanshan.png", UriKind.Relative));            }            DoubleAnimation daX = new DoubleAnimation();            daX.From = 0;            daX.To = 400;            daX.FillBehavior = FillBehavior.HoldEnd;            Storyboard.SetTarget(daX, img);            Storyboard.SetTargetProperty(daX, new PropertyPath(Image.WidthProperty));            DoubleAnimation daY = new DoubleAnimation();            daY.From = 0;            daY.To = 400;            daY.FillBehavior = FillBehavior.HoldEnd;            Storyboard.SetTarget(daY, img);            Storyboard.SetTargetProperty(daY, new PropertyPath(Image.HeightProperty));            DoubleAnimation daOp = new DoubleAnimation();            daOp.From = 1;            daOp.To = 1;            daOp.FillBehavior = FillBehavior.HoldEnd;            Storyboard.SetTarget(daOp, img);            Storyboard.SetTargetProperty(daOp, new PropertyPath(Image.OpacityProperty));            Storyboard sb = new Storyboard();            sb.Children.Add(daX);            sb.Children.Add(daY);            sb.Children.Add(daOp);            sb.Begin();        }

 

转载地址:http://frcta.baihongyu.com/

你可能感兴趣的文章
HBase编程 API入门系列之put(客户端而言)(1)
查看>>
Oracle Form's Trigger Tutorial With Sample FMB
查看>>
Nuget很慢,我们该怎么办
查看>>
easyui filter 过滤时间段
查看>>
2017-01-03
查看>>
C++获取当前目录
查看>>
Genymotion 解决虚拟镜像下载速度特别慢的问题
查看>>
Oracle数据库的语句级读一致性
查看>>
Cannot run Eclipse; JVM terminated. Exit code=13
查看>>
sort与sorted
查看>>
linux下安装和卸载vmware产品
查看>>
Linux系统(一)文件系统、压缩、打包操作总结
查看>>
微信小程序把玩(四十)animation API
查看>>
Android Application中的Context和Activity中的Context的异同
查看>>
MyBatis接口的简单实现原理
查看>>
从0移植uboot (二) _uboot启动流程分析
查看>>
C++异常实现与longjmp, setjmp,栈指针EBP, Active Record
查看>>
Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
查看>>
CISCO知识扫盲
查看>>
[原创]浅谈对华为34岁以上员工“退休”
查看>>