当鼠标快速拖出窗外按下左键 Mouse.DirectlyOver
返回System.Windows.Controls.Grid
而不是null
。< / p>
Window.IsMouseOver
返回true
new Rect(window.RenderSize).Contains(Mouse.GetPosition(window))
返回true
要重现这一点,只需在一个空白的wpf项目中将检查计时器添加到MainWindow()
:
public MainWindow()
{
InitializeComponent();
var timer = new System.Threading.Timer(state =>
Dispatcher.BeginInvoke(new Action(
() => Debug.WriteLine("Mouse.DirectlyOver = {0}", Mouse.DirectlyOver)
)),null,0,10);
}
当我慢慢拖出 时,值是正确的。
有解决方法吗?什么是确定鼠标的协同方法不在应用程序中?
答案 0 :(得分:0)
找到了解决方法。 在每个刻度线上,我使用WinAPI的
检索鼠标位置 [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetCursorPos(ref Win32Point pt);
然后手动在窗口边框内检查。