我正在尝试显示用户在WPF应用程序中单击鼠标的上下文菜单。我处理了OpenContextMenu
事件,处理程序有一对doubles
,e.CursorLeft
和e.CursorTop
,它们是鼠标点击相对于被点击控件的坐标(在这种情况下是DataGridCell
)。如果我使用这些坐标显示上下文菜单,它将相对于应用程序窗口偏移光标数量。
如何将DataGridCell
- 相对光标坐标转换为窗口坐标空间?
答案 0 :(得分:2)
您可以使用UIElement.TranslatePoint(Point, Visual)
方法将坐标从一个控件的坐标空间转换为另一个坐标空间。以下代码应该执行您想要的操作(未测试!):
Point target =
myDataGridCell.TranslatePoint(new Point(e.CursorLeft, e.CursorTop), Application.Current.MainWindow);
但是,如果您只想显示上下文菜单,您还可以简单地为控件分配FrameworkElement.ContextMenu
属性,该属性应显示上下文菜单。这样,位置将自动定位在鼠标光标处。如果你有一个更复杂的场景,你仍然可以使用上面的方法。