将WPF ContextMenu放在第二个屏幕上

我目前正在尝试解决以下问题:

我没有父窗口,我只是右键单击第二个屏幕,打开一个WPF ContextMenu(来自原生C ++母版应用程序),它实际上没有出现在第二个屏幕上,而是出现在第一个屏幕上。

  1. 我尝试使用鼠标坐标。 不起作用,因为ContextMenu将保留在第一个屏幕上。
  2. 在第二个屏幕上放置一个不可见的辅助窗口,将其设置为父级并在相对于第二个屏幕左上角的坐标处打开ContextMenu工作正常。 但我不想使用辅助窗口。

现在:如何在没有父窗口的情况下将ContextMenu放在第二个屏幕上。 有没有办法告诉菜单使用什么屏幕? 也许我可以在ContextMenu的“CustomPopupPlacementCallback”中使用一些参数?

任何帮助将不胜感激:-D

干杯!

来自msdn :

将ContextMenu分配给FrameworkElement.ContextMenu或FrameworkContentElement.ContextMenu属性时,ContextMenuService会在ContextMenu打开时更改此属性的此值。 如果用户使用鼠标打开ContextMenu,则Placement将设置为MousePoint。 如果用户使用键盘打开ContextMenu,则“放置”设置为“中心”。 如果要更改ContextMenu的位置,请在FrameworkElement或FrameworkContentElement上设置ContextMenuService.Placement属性。

也来自MSDN

您可以通过设置PlacementTarget,PlacementRectangle,Placement,Horizo​​ntalOffset和VerticalOffsetProperty属性来定位ContextMenu。 这些属性与Popup的属性相同。 有关更多信息,请参阅弹出放置行为。

更多阅读: ContextMenu类 , PlacementMode枚举 (实际上看起来很有用)。

另外,请记住,这实际上是在Popup中显示的。


可能不相关,但Nmaait在以下链接中的答案使用一些win32调用来获取鼠标的位置。 也许你可以利用它来获得你想要的上下文菜单:

落一个窗口-到-另一个窗口