我目前正在尝试解决以下问题:
我没有父窗口,我只是右键单击第二个屏幕,打开一个WPF ContextMenu(来自原生C ++母版应用程序),它实际上没有出现在第二个屏幕上,而是出现在第一个屏幕上。
现在:如何在没有父窗口的情况下将ContextMenu放在第二个屏幕上。有没有办法告诉菜单使用什么屏幕?也许我可以在ContextMenu的“CustomPopupPlacementCallback”中使用一些参数?
任何帮助将不胜感激:-D
喝彩!
答案 0 :(得分:0)
来自msdn:
将ContextMenu分配给FrameworkElement.ContextMenu或FrameworkContentElement.ContextMenu属性时,ContextMenuService会在ContextMenu打开时更改此属性的此值。如果用户使用鼠标打开ContextMenu,则Placement将设置为MousePoint。如果用户使用键盘打开ContextMenu,则“放置”设置为“中心”。如果要更改ContextMenu的位置,请在FrameworkElement或FrameworkContentElement上设置ContextMenuService.Placement属性。
同样来自MSDN
您可以通过设置PlacementTarget,PlacementRectangle,Placement,HorizontalOffset和VerticalOffsetProperty属性来定位ContextMenu。这些属性与弹出窗口的行为相同。有关更多信息,请参阅弹出放置行为。
更多阅读:ContextMenu class,PlacementMode Enumeration(实际上似乎很有用)。
另外,请记住,这实际上是在Popup中显示的。
可能不相关,但以下链接中的Nmaait's回答使用了一些win32调用来获取鼠标的位置。也许你可以利用它来获得你想要的上下文菜单: