在触摸坐标处获取UI元素

本文关键字:UI 元素 获取 触摸 坐标 | 更新日期: 2023-09-27 18:21:25

我肯定已经读到有一种方法可以在WPF应用程序中获取TouchDown的坐标,并找出这种触摸的"下面"是什么UI元素。有人能帮忙吗?

在触摸坐标处获取UI元素

您必须对可视化树进行命中测试。

这里有一个鼠标点击的例子(但触摸在这方面或多或少是一样的):

// Respond to the left mouse button down event by initiating the hit test.
private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    // Retrieve the coordinate of the mouse position.
    Point pt = e.GetPosition((UIElement)sender);
    // Perform the hit test against a given portion of the visual object tree.
    HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt);
    if (result != null)
    {
        // Perform action on hit visual object.
    } 
}

其他超负荷的HitTest可以为您提供多个命中视觉效果。

让您的UI元素像这样扩展UIElement类:

class MyUIElement : UIElement
    {
        protected override void OnManipulationStarting(System.Windows.Input.ManipulationStartingEventArgs e)
        {
            base.OnManipulationStarting(e);
            UIElement involvedUIElement = e.Source as UIElement;
            // to cancel the touch manipulaiton:
            e.Cancel();
        }
    }

involvedUIElement应该包含引发触摸事件的UI元素,如果您需要取消对特定元素的操作,只需要调用e.Cancel();

我希望这会有所帮助!