0

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

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

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

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

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

干杯!

4

1 回答 1

0

来自msdn

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

同样来自MSDN

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

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

另外,请记住,这实际上显示在弹出窗口中。


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

将一个窗口放入另一个窗口

于 2013-11-08T15:11:06.703 回答