我在XAML中创建了一个Control并将其添加到装饰层中,在控件中我有一个部分,当右键单击时会生成一个上下文菜单(使用TextBox.ContextMenu属性)。我已经在常规的WPF窗口中进行了测试,效果很好。但是,当我在装饰层上的Visual Studio中尝试相同时,我只获得了VS2010编辑器上下文菜单。
我现在也尝试使用常规的MouseRightButtonUp事件,这似乎有用(事件到达函数)。但是,一旦事件函数退出,编辑器上下文菜单就会跳起来。
谢谢你, 维塔利彼得
答案 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