如何在C#WPF应用程序中使用CaptureMouse或Mouse.Capture?

Pau*_*ams 18 c# wpf

我希望能够访问鼠标的坐标,无论光标是否在我的应用程序的窗口上.

当我使用Mouse.Capture(IInputElement)或UIElement.CaptureMouse()时,两者都无法捕获鼠标并返回false.

可能是我的问题?

我窗口的cs文件如下:

using System.Windows;
using System.Windows.Input;

namespace ScreenLooker
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            bool bSuccess = Mouse.Capture(this);
            bSuccess = this.CaptureMouse();
        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            tbCoordX.Text = e.GetPosition(this).X.ToString();
            tbCoordY.Text = e.GetPosition(this).Y.ToString();
            //System.Drawing.Point oPoint = System.Windows.Forms.Cursor.Position;
            //tbCoordX.Text = oPoint.X.ToString();
            //tbCoordY.Text = oPoint.Y.ToString();

            base.OnMouseMove(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Rhy*_*hys 18

传递给的控件Mouse.Capture()需要是VisibleEnabled.

尝试将Mouse.Capture放入Loaded事件处理程序中,例如

在XAML中:

<Window ... .. .. Title="My Window" loaded="Window_Loaded">
...
</Window>
Run Code Online (Sandbox Code Playgroud)

在代码中:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
  var b = Mouse.Capture(this);
}
Run Code Online (Sandbox Code Playgroud)

我之前没有拍过整个窗口,所以不确定它是如何工作的.它的典型用法是.

  1. MouseDown: - 调用Mouse.Capture()子控件
  2. MouseMove: - 处理鼠标的X和Y坐标
  3. MouseUp: - 调用Mouse.Capture(null)以清除鼠标事件捕获.