【问题标题】:WPF ContextMenu incorrect positionWPF ContextMenu 位置不正确
【发布时间】:2015-08-07 20:49:45
【问题描述】:

我一直在尝试将上下文菜单添加到通知图标(系统托盘图标)。 这是我自己围绕原生 Shell_NotifyIcon 函数的自定义 WPF 包装器。

我一直在使用以下代码来显示上下文菜单:

contextMenu.Placement = PlacementMode.AbsolutePoint;
contextMenu.HorizontalOffset = args.X;
contextMenu.VerticalOffset = args.Y;
contextMenu.IsOpen = true;

args.Xargs.Y 是单击通知图标时鼠标的绝对屏幕坐标(我已验证它包含正确的鼠标位置)。

由于某种原因,上下文菜单显示在鼠标位置上方和左侧大约 5-7 个像素处:

系统托盘上其他图标的上下文菜单会准确显示鼠标所在的位置。

我搜索了 ContextMenu 的所有可用属性,但似乎没有任何东西可以修复它。 我错过了什么吗? 我总是可以手动调整 7 个左右像素,但如果有更好的方法,我宁愿做任何可能的方法。

【问题讨论】:

  • 我的第一个猜测是 ContextMenu 上有一个默认边距。您是否尝试过将边距显式设置为 0?
  • 是的,我已经尝试将 Margin 设置为 0。没有区别。 :(

标签: c# wpf contextmenu offset


【解决方案1】:

我不确定为什么 AbsolutePoint 会这样。但是如果你想把上下文菜单放在鼠标指针的尖端,你试过吗

contextMenu.Placement = PlacementMode.MousePoint;
contextMenu.HorizontalOffset = 0;
contextMenu.VerticalOffset = 0;

MSDN (https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.placementmode%28v=vs.110%29.aspx) 解释说,MousePoint 会将上下文菜单定位为“...相对于鼠标光标的尖端并且在偏移...”。

【讨论】:

  • MousePoint 会在鼠标单击的位置准确显示 ContextMenu,但我发现如果您单击并立即移动鼠标,则 ContextMenu 会出现在鼠标的新位置。有谁知道如何让它出现在点击的地方?
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多