代码之家  ›  专栏  ›  技术社区  ›  VitalyB

右键单击上下文菜单以修饰-不起作用,而是调用编辑器菜单(VS2010)

  •  1
  • VitalyB  · 技术社区  · 14 年前

    我在XAML中创建了一个控件并将其添加到装饰层,在该控件中,我有一个节,当右键单击时,该节将生成上下文菜单(使用textbox.contextmenu属性)。我在一个常规的WPF窗口中测试过它,它工作得很好。但是,当我在Visual Studio的装饰层上尝试相同的方法时,我只得到了VS2010编辑器上下文菜单。

    我现在还尝试使用常规的mouselightbuttonup事件,它看起来确实有效(事件到达函数)。但是,一旦事件函数退出,编辑器上下文菜单就会跳起来。

    1. 我怎么做普通的 要工作的上下文菜单?
    2. 如果有 不行,我怎么能阻止编辑呢 从跳到后面的上下文菜单 鼠标点亮按钮功能?
    3. (跟进到2)如何调用 上下文菜单手动从 鼠标点亮按钮?

    谢谢您, 维塔利

    1 回复  |  直到 14 年前
        1
  •  2
  •   Noah Richards    14 年前

    在右键向上处理程序中,是否将事件标记为已处理?否则,编辑器将在处理程序完成后看到事件。如果您将其标记为“已处理”,但它仍然不起作用,则还有另一个选项。

    更“正式”的做法是 IMouseProcessorProvider + MouseProcessorBase . 你需要重写 PreprocessMouseRightButtonUp 尽管只有当装饰是单击的元素时。这就是普通编辑器上下文菜单代码的工作方式;它实现了这些鼠标处理器之一,处理右键单击,并要求Visual Studio外壳程序在单击位置显示上下文菜单(通过发送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