• WPF使用VisualTreeHelperj简单进行命中测试


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

    三、运行效果


    技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
    我创建了一个.NET开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    [转载]混合高斯模型
    威流IIS日志分析器1.2版本发布
    获取datagridview列中button点击事件
    C#引用winwebmail的dll
    威流网站监控系统新增飞信提醒
    关于Server.MapPath()
    把"\"转换成"/"
    asp.net站点常见问题绵集
    动态显示系统时间
    得到一个文件夹下的文件,并将文件删除
  • 原文地址:https://www.cnblogs.com/wml-it/p/14949954.html
Copyright © 2020-2023  润新知