【问题标题】:Mouse capture is failing?鼠标捕捉失败?
【发布时间】:2009-01-13 00:58:00
【问题描述】:

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

当我使用 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);
        }
    }
}

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    传递给Mouse.Capture() 的控件需要可见启用

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

    在 XAML 中:

    <Window ... .. .. Title="My Window" loaded="Window_Loaded">
    ...
    </Window>
    

    在代码中:

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

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

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

    【讨论】:

    • 谢谢。我检查了窗口是否启用,但没有检查它是否处于活动状态。即使在捕获鼠标之后,MouseMove 仍然只有在鼠标在窗口内时才会被提升。也许 Capture 不是我想要的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多