MouseEventArgs.GetPosition(..)未返回WPF中的相对位置

本文关键字:相对 位置 WPF 返回 GetPosition MouseEventArgs | 更新日期: 2023-09-27 18:21:45

我在一个应用程序中有两个事件处理程序,它们提供"拖动"类型的操作(而不是实际的拖动事件)。为此,我有事件处理程序来处理MouseDownMouseMove事件。

    private void OnMouseDown(object sender,MouseButtonEventArgs e)
    {
        //The following CORRECTLY gives the relative position
        //Note the MouseButtonEventArgs type
        Point position = e.GetPosition(this.myCanvas);
        Point relativePosition = e.GetPosition(this.myUsercontrol);
        //Do something with position and relative position
    }
    private void OnMouseMove(object sender,MouseEventArgs e)
    {
        //The following INCORRECTLY gives the relative position.
        //Note the MouseEventArgs type
        Point position = e.GetPosition(this.myCanvas);
        Point relativePosition = e.GetPosition(this.myUsercontrol);
        //Do something with position and relative position
    }

我遇到的问题是,在鼠标移动事件期间,我需要使用鼠标的相对位置。然而,当我在MouseEventArgs上调用GetPosition(…)时,它会返回(0,0),但当在MouseButtonEventArgs中调用时,它工作得非常好。为什么

MouseEventArgs.GetPosition(..)未返回WPF中的相对位置

鼠标事件的问题在于,它们并不完全只发生在您正在查看的上下文中,相同的事件在任何地方都会发生。如果其他元素设置MouseEventArgs.Handled=true。。。奇怪的事情开始发生了。我也遇到了同样的问题,e.GetPosition()返回了一个常数{-25;-170},但只有当窗口处于正常模式时,当最大化时,一切都很好。罪魁祸首是窗口级事件处理程序设置e。Handled=true;因此,请检查您的应用程序使用鼠标事件的其他位置