日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

WPF使用VisualTreeHelper進行命中測試_實用技巧

作者:農碼一生 ? 更新時間: 2022-06-20 編程語言

一、簡介

我們有時候又需求從當前視覺樹中找一些東西,比如鼠標按下的時候,看看鼠標下的元素都有什么。又比如某塊區域下有哪些元素?某個坐標點下有哪些元素?這些需求在使用 命中測試的時候,可以非常方便和快速的去找到我們需要的內容。

二、代碼案例

我在一個畫板上在不同的位置放了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;
        }

三、運行效果

原文鏈接:https://www.cnblogs.com/wml-it/p/14949954.html

欄目分類
最近更新