将WPF ContextMenu放在第二个屏幕上

时间:2013-11-08 14:09:31

标签: c# wpf layout popup contextmenu

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

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

  1. 我尝试使用鼠标坐标。因为ContextMenu将保留在第一个屏幕上,所以不起作用。
  2. 在第二个屏幕上放置一个不可见的帮助窗口,将其设置为父窗口并在相对于第二个屏幕左上角的坐标处打开ContextMenu可以正常工作。但我不想使用辅助窗口。
  3. 现在:如何在没有父窗口的情况下将ContextMenu放在第二个屏幕上。有没有办法告诉菜单使用什么屏幕?也许我可以在ContextMenu的“CustomPopupPlacementCallback”中使用一些参数?

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

    喝彩!

1 个答案:

答案 0 :(得分:0)

来自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。这些属性与弹出窗口的行为相同。有关更多信息,请参阅弹出放置行为。

更多阅读:ContextMenu classPlacementMode Enumeration(实际上似乎很有用)。

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


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

drop-a-window-into-another-window