WPF使用VisualTreeHelper进行命中测试

 更新时间:2022年04月21日 16:06:03   作者:農碼一生  
这篇文章介绍了WPF使用VisualTreeHelper进行命中测试的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、简介

我们有时候又需求从当前视觉树中找一些东西,比如鼠标按下的时候,看看鼠标下的元素都有什么。又比如某块区域下有哪些元素?某个坐标点下有哪些元素?这些需求在使用 命中测试的时候,可以非常方便和快速的去找到我们需要的内容。

二、代码案例

我在一个画板上在不同的位置放了3个圆形。给他们放置了不同的位置和填充不同的颜色,我们通过命中测试判断如果鼠标在圆上抬起了,我们读取当前圆的填充颜色。 

XAML:

    <Grid MouseLeftButtonUp="Grid_MouseLeftButtonUp">
        <Canvas>
            <!--三个圆形-->
            <Ellipse  Canvas.Left="30" Canvas.Top="200"  Width="130" Height="130" Fill="Blue"/>
            <Ellipse  Canvas.Left="110" Canvas.Top="0"  Width="130" Height="130" Fill="Red"/>
            <Ellipse   Canvas.Left="220" Canvas.Top="100"  Width="130" Height="130" Fill="Yellow"/>
            <TextBlock  Canvas.Left="0" Canvas.Top="0" Text="抬起鼠标左键,开始对鼠标所在点进行命中测试" />
        </Canvas>
    </Grid>

后台逻辑:

        private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            var ellipse = GetVisual(e.GetPosition(this));
            MessageBox.Show(ellipse?.Fill?.ToString());
        }

        private Ellipse GetVisual(Point point)
        {
            HitTestResult hitResult = VisualTreeHelper.HitTest(this, point);
            var ellipse = hitResult.VisualHit as Ellipse;
            return ellipse;
        }

三、运行效果

到此这篇关于WPF使用VisualTreeHelper进行命中测试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 对ListBox的添加移除操作实例分享

    对ListBox的添加移除操作实例分享

    ListBox的添加移除操作在开发过程中经常会遇到过,接下来本文也实现一个,思路很清晰,感兴趣的朋友可以参考下,希望可以帮助到你
    2013-04-04
  • asp.net c#采集需要登录页面的实现原理及代码

    asp.net c#采集需要登录页面的实现原理及代码

    当我们采集页面的时候,如果被采集的网站需要登录才能采集,原理搞清楚了,就好办了,我们所要做的仅仅是在采集的时候(或者说HttpWebRequest提交数据的时候),将Cookie信息放入Http请求头里面就可以了,感兴趣的朋友可以了解下,或许对你有所帮助
    2013-02-02
  • .net 中按.(点)无法智能提示的bug解决方案

    .net 中按.(点)无法智能提示的bug解决方案

    IDE按.无法智能提示,但是可以编译并正常使用,在修改别人代码bug时遇到的,接下来为你提供详细解决方法,感兴趣的你可以参考下哈
    2013-03-03
  • 合并两个DataSet的数据内容的方法

    合并两个DataSet的数据内容的方法

    合并两个DataSet的数据内容的方法,需要的朋友可以参考一下
    2013-03-03
  • ASP.Net缓存总结及分析 分享

    ASP.Net缓存总结及分析 分享

    提高性能最好最快的办法当然是通过缓存来改善,对于任何一个web开发者都应该善用缓存。Asp.net下的缓存机制十分强大,用好缓存机制可以让我们极大的改善web应用的性能,下面是一些总结的缓存的知识点,与大家分享交流:
    2013-06-06
  • 安装.NET Framework进度条卡住不动的解决方案(推荐)

    安装.NET Framework进度条卡住不动的解决方案(推荐)

    VS在安装之前需要安装.NET Framework,我安装的是4.0版本。但是安装进度条到一半左右时就卡住不动了。前前后后重试多次,还有几次重新开机,但都没用,怎么解决呢,下面给大家分享下解决方案
    2016-12-12
  • jQuery实现金额录入框

    jQuery实现金额录入框

    前端开发过程中,通常会用到数值录入框,比如要求输入金额,禁止录入非数值字符,也禁止粘贴非数值字符,本文主要对其实现方法进行介绍,需要的朋友一起来看下吧
    2016-12-12
  • Json.net日期格式化设置方式

    Json.net日期格式化设置方式

    这篇文章主要介绍了Json.net日期格式化设置方式,文中给大家补充介绍了json.net 使用属性定义日期的序列化格式,需要的朋友可以参考下
    2018-11-11
  • .net中实现listBox左右移动

    .net中实现listBox左右移动

    这里给大家推荐的是一段网友分享的,使用.net实现listBox左右移动的代码,简单实用,这里记录下来,有需要的小伙伴参考下吧。
    2015-03-03
  • 详解在Windows下如何使用AspNetCore Api 和consul

    详解在Windows下如何使用AspNetCore Api 和consul

    这篇文章主要介绍了详解在Windows下如何使用AspNetCore Api 和consul,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论