值得注意的IsHitTestVisible

简介: 原文:值得注意的IsHitTestVisible 这个属性我们平时可能并不怎么用.先来看下MSDN上的解释: 解释的非常专业,然而我并没有看懂. 说说我的理解吧:把这个属性设置为false,看起来没有变化,但操作上已经把他完全忽视了,不触发事件,可以直接点到它下面的东西.

原文:值得注意的IsHitTestVisible

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

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

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

 

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

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

当然解决方案有很多:

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

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

 

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

 

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

 

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

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

见代码:

 XMAL:

   <Grid>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="70" />
                <RowDefinition />
                <RowDefinition Height="50" />
            </Grid.RowDefinitions>
            <Border Background="Red">
                <Label Content="logo" Foreground="White" />
            </Border>
            <Grid Grid.Row="1" Background="#AAAFAF">
                <StackPanel
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Button.Click="StackPanel_Click">
                    <Button
                        Width="132"
                        Height="32"
                        Margin="10"
                        Content="金闪闪" />
                    <Button
                        Width="132"
                        Height="32"
                        Margin="10"
                        Content="小圆" />
                </StackPanel>
                <Label
                    Width="100"
                    Height="100"
                    Margin="76,29,266,171"
                    Background="Green"
                    Content="我不透明"
                    Foreground="Blue" />
                <Label
                    Width="100"
                    Height="40"
                    Margin="112,40,230,220"
                    Background="Red"
                    Content="我不透明"
                    Foreground="Blue" />
            </Grid>
            <Border Grid.Row="2" Background="#555F5F">
                <Label Content="状态栏" Foreground="White" />
            </Border>
        </Grid>
        <Image
            Name="img"
            Width="0"
            Height="0"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            IsHitTestVisible="False"
            Opacity=".8"
            Source="/Image/jinshanshan.png"
            Stretch="Fill" />
    </Grid>

 

后台:

  

  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();
        }

 

目录
相关文章
|
10天前
|
机器学习/深度学习 自然语言处理 测试技术
直接扩展到无限长,谷歌Infini-Transformer终结上下文长度之争
【4月更文挑战第23天】谷歌研究团队推出Infini-Transformer,一种能处理无限长度输入的大型语言模型,解决了长序列数据处理中的内存和计算瓶颈。新模型采用Infini-attention机制,结合压缩记忆,实现高效计算和内存使用。实验显示,该模型在长上下文任务中表现出色,适用于处理极长输入序列,具有低内存占用和快速流式推理能力。论文链接:https://arxiv.org/pdf/2404.07143.pdf
19 1
|
5月前
|
编译器 C++
【C++】string类模拟实现过程中值得注意的点
【C++】string类模拟实现过程中值得注意的点
49 0
|
9月前
|
Web App开发 机器人 数据安全/隐私保护
将上下文长度扩展到256k,无限上下文版本的LongLLaMA来了?
将上下文长度扩展到256k,无限上下文版本的LongLLaMA来了?
132 0
|
12月前
|
存储 机器学习/深度学习 IDE
参数量仅0.5B,谷歌代码补全新方法将内部生产效率提升6%
参数量仅0.5B,谷歌代码补全新方法将内部生产效率提升6%
|
C++ 编译器 Python
Shared_from_this 几个值得注意的地方
shared_from_this()是enable_shared_from_this的成员 函数,返回shared_ptr。首先需要注意的是,这个函数仅在shared_ptr的构造函数被调用之后才能使 用。
1929 0
|
搜索推荐 程序员 计算机视觉
一个人真正的改变,从提出一个好问题开始
# 前言 现如今的时代,相较于直接得到答案,提问的效果更好,它本质上其实就是一种绝佳的学习手段。爱因斯坦说过:“如果我必须用一小时思考一个问题,我会花55分钟考虑我要提出什么问题,用5分钟时间找答案。” # 本文大纲 ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/9501d4d3-4ae4-406c-8c1b-8
一个人真正的改变,从提出一个好问题开始
|
SQL BI 关系型数据库
参数为空取全部数据的几种做法
当通过多个参数对数据进行过滤并且不选择某个参数时,希望依然能够查询出其他带条件的数据,也就是参数为空时忽略掉该条件,点击 <a href="http://c.raqsoft.com.cn/article/1543386793666?r=IBelieve" target="_blank" rel="n...
980 0