【问题标题】:Place WPF ContextMenu on second screen将 WPF ContextMenu 放在第二个屏幕上
【发布时间】:2013-11-20 13:53:04
【问题描述】:

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

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

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

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

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

干杯!

【问题讨论】:

  • 第二屏是什么意思??如“窗口”或“监视器”?
  • 对不起。我的意思是我必须“监控”。就像在 Windows 中一样,我可以识别我的屏幕(显示器),并尝试在第二个屏幕上显示弹出窗口。

标签: c# wpf layout popup contextmenu


【解决方案1】:

来自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 classPlacementMode Enumeration(实际上似乎很有用)。

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


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

drop-a-window-into-another-window

【讨论】:

  • 使用ContextMenuService.SetPlacement( this, PlacementMode.MousePoint ); 确实成功了。 ContextMenu 现在在我的光标旁边打开。谢谢,伙计!
  • :) 很高兴我能帮上忙
猜你喜欢
  • 1970-01-01
  • 2020-01-19
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
相关资源
最近更新 更多