0

当鼠标被快速拖出窗口并按下左键 Mouse.DirectlyOver时返回System.Windows.Controls.Grid而不是null.

Window.IsMouseOver返回true

new Rect(window.RenderSize).Contains(Mouse.GetPosition(window))返回true

要重现这一点,只需MainWindow()在一个空白 wpf 项目中添加检查计时器,如下所示:

    public MainWindow()
    {
        InitializeComponent();
        var timer = new System.Threading.Timer(state =>
            Dispatcher.BeginInvoke(new Action(
                () => Debug.WriteLine("Mouse.DirectlyOver = {0}", Mouse.DirectlyOver)
                )),null,0,10);
    }

当我慢慢拖出来时,这些值是正确的。

有解决方法吗?确定鼠标退出应用程序的正确方法是什么?

4

1 回答 1

0

找到了解决方法。在每个滴答声中,我都使用 WinAPI 检索鼠标位置

 [DllImport("user32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 internal static extern bool GetCursorPos(ref Win32Point pt);

然后手动在窗口边界内签入。

于 2012-12-03T13:52:21.080 回答