如何在屏幕上的任何位置GetMousePosition,在窗口(或任何Visual)的范围之外

时间:2010-11-26 18:12:05

标签: wpf

我想跟踪屏幕坐标中鼠标光标在屏幕上任何位置的位置。因此,即使鼠标光标移动到窗口边界之外,有没有办法获取鼠标光标的位置?

我正在做的是尝试弹出一个跟随鼠标光标的弹出窗口,即使它离开主窗口。

以下是我尝试过(并且没有效果)的代码片段:

        private void OnLoaded(object sender, RoutedEventArgs e)
    {           
        bool gotcapture = this.CaptureMouse();
        Mouse.AddLostMouseCaptureHandler(this, this.OnMouseLostCapture);
    }
            Point mouse_position_relative = Mouse.GetPosition(this);
        Point mouse_screen_position = popup.PointToScreen(mouse_position_relative);
        private void OnMouseLostCapture(object sender, MouseEventArgs e)
    {
        bool gotcapture = this.CaptureMouse();
        this.textblock.Text = "lost capture.";
    }

3 个答案:

答案 0 :(得分:3)

你的问题究竟是什么? 等待! 一种将Popup相对于屏幕定位的方法。见PlacementMode.AbsolutePoint
这显示出一张幸福的脸飞来飞去:

private Popup _popup;

public Window1()
{
    InitializeComponent();

    this.Loaded += OnLoaded;
}

private void OnLoaded(object sender, RoutedEventArgs e)
{
    _popup = new Popup
              {
                  Child = new TextBlock {Text = "=))", Background = Brushes.White},
                  Placement = PlacementMode.AbsolutePoint,
                  StaysOpen = true,
                  IsOpen = true
              };
    MouseMove += MouseMoveMethod;
    CaptureMouse();
}

private void MouseMoveMethod(object sender, MouseEventArgs e)
{
    var relativePosition = e.GetPosition(this);
    var point= PointToScreen(relativePosition);
    _popup.HorizontalOffset = point.X;
    _popup.VerticalOffset = point.Y;
}

答案 1 :(得分:0)

没关系,我意识到没有办法将Popup相对于屏幕定位,只相对于包含它的Visual。

答案 2 :(得分:0)

有许多方法可以获得WPF Window之外的鼠标位置的屏幕坐标。不幸的是,您需要添加引用以使用其中任何一个,但 可能。您可以在@ FredrikHedblad对How do I get the current mouse screen coordinates in WPF?问题的回答中找到它们的示例。巧合的是,在您提出这个问题前几天就回答了这个问题,并在21分钟内放弃了。