右键单击上下文菜单到装饰 - 不起作用并调用编辑器菜单(VS2010)

时间:2010-10-13 23:11:21

标签: wpf visual-studio visual-studio-2010 vsx

我在XAML中创建了一个Control并将其添加到装饰层中,在控件中我有一个部分,当右键单击时会生成一个上下文菜单(使用TextBox.ContextMenu属性)。我已经在常规的WPF窗口中进行了测试,效果很好。但是,当我在装饰层上的Visual Studio中尝试相同时,我只获得了VS2010编辑器上下文菜单。

我现在也尝试使用常规的MouseRightButtonUp事件,这似乎有用(事件到达函数)。但是,一旦事件函数退出,编辑器上下文菜单就会跳起来。

  1. 我怎样才能成为常规 上下文菜单工作?
  2. 如果有的话 没办法,我怎么能阻止编辑器 从跳跃后的上下文菜单 MouseRightButtonUp函数?
  3. (跟进#2)我如何调用 手动上下文菜单 的MouseRightButtonUp?
  4. 谢谢你, 维塔利彼得

1 个答案:

答案 0 :(得分:2)

在右键按钮处理程序中,您是否将事件标记为已处理?如果没有,编辑器将在处理程序完成后看到该事件。如果您将其标记为已处理且仍然无效,则还有另一种选择。

更“正式”的方法是实施IMouseProcessorProvider + MouseProcessorBase。您需要覆盖PreprocessMouseRightButtonUp,但前提是您的装饰是被点击的元素。这是普通编辑器上下文菜单代码的工作方式;它实现了其中一个鼠标处理器,处理右键单击,并要求Visual Studio shell在单击位置显示上下文菜单(通过发送SHOWCONTEXTMENU命令)。

如果你走这条路线,你的鼠标处理器提供商应该有这个元数据(手工输入,抱歉任何错别字):

[Export(typeof(IMouseProcessorProvider))]
[Name("WhateverYouWantToCallIt")]
[Order(Before = "VisualStudioMouseProcessor")]
[ContentType("text")] // or whatever your adornment is specific to
[TextViewRole(PredefinedTextViewRoles.Interactive)]
internal sealed class MouseProcProvider : IMouseProcessorProvider