WPF鼠标位置无法正确检索
本文关键字:检索 鼠标 位置 WPF | 更新日期: 2023-09-27 18:11:06
披露:这是我的第一个WPF应用程序。请接受我的无知。
在我的WPF应用程序中,我有一个带有网格和各种子节点的ControlTemplate。在代码后面,我使用ControlTemplate动态地添加一个自定义ContentControl元素。
创建新控件时,它旨在捕获鼠标并允许拖动功能。如果网格已经加载到窗口上,并且我将起始点设置为MouseButtonEventArgs.GetPosition(窗口),那么拖动计算的代码就可以了。但是当事件在Grid初始加载时被触发时,Point等于窗口的反向位置。例如,如果我的窗口是(350,250),我的起始点是(-350,-250)。
private void GridLoaded(object sender, EventArgs e) { // fires MouseLeftButtonDown event for grid}
private void MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
...
m_start = e.GetPosition(this); // 'this' is the current window; returns the inverse coordinates of 'this'
...
}
是否有更合适的方法来获得我的鼠标位置的x,y坐标。如果有必要,我可以使用屏幕坐标,但我发现的所有代码都使用了PointToScreen(m_start)。这是无用的,因为m_start是不正确的。
你能试一下吗?我前一段时间遇到了这个问题,它对我来说很有效:
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
public static implicit operator Point(POINT point)
{
return new Point(point.X, point.Y);
}
}
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);
public static Point GetCursorPosition()
{
POINT lpPoint;
GetCursorPos(out lpPoint);
//bool success = User32.GetCursorPos(out lpPoint);
// if (!success)
return lpPoint;
}