zoukankan      html  css  js  c++  java
  • 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开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    Android Service
    Java 关键字 static final
    Django | mysql修改个别表后save()报错
    Django | Unable to get repr for <class 'django.db.models.query.QuerySet'>
    MySQL | linux中数据库导出和导入
    MySQL | 查看log日志
    python | log日志
    python | 网络编程(socket、udp、tcp)
    Python | 异常处理
    Python | 单例模式
  • 原文地址:https://www.cnblogs.com/wml-it/p/14949954.html
Copyright © 2011-2022 走看看