如何将ContextMenuEventArgs光标位置转换为窗口坐标

时间:2010-10-07 08:09:22

标签: c# wpf

我正在尝试显示用户在WPF应用程序中单击鼠标的上下文菜单。我处理了OpenContextMenu事件,处理程序有一对doublese.CursorLefte.CursorTop,它们是鼠标点击相对于被点击控件的坐标(在这种情况下是DataGridCell)。如果我使用这些坐标显示上下文菜单,它将相对于应用程序窗口偏移光标数量。

如何将DataGridCell - 相对光标坐标转换为窗口坐标空间?

1 个答案:

答案 0 :(得分:2)

您可以使用UIElement.TranslatePoint(Point, Visual)方法将坐标从一个控件的坐标空间转换为另一个坐标空间。以下代码应该执行您想要的操作(未测试!)

Point target =
    myDataGridCell.TranslatePoint(new Point(e.CursorLeft, e.CursorTop), Application.Current.MainWindow);

但是,如果您只想显示上下文菜单,您还可以简单地为控件分配FrameworkElement.ContextMenu属性,该属性应显示上下文菜单。这样,位置将自动定位在鼠标光标处。如果你有一个更复杂的场景,你仍然可以使用上面的方法。