visualstudio扩展键处理器,禁止输入键';的默认行为

本文关键字:默认 扩展 处理器 禁止输入 visualstudio | 更新日期: 2024-09-22 22:38:54

我正在开发一个Visual Studio扩展,它试图抑制Enter/Return键的默认行为(将插入符号更改为下一行)。所以我可以做一些自定义操作,比如在按下回车键并关闭大括号之前将插入符号移到末尾(比如Eclipse)

[Export(typeof(IKeyProcessorProvider))]
[TextViewRole(PredefinedTextViewRoles.PrimaryDocument)]
[ContentType("any")]
[Name("ToTheEndKeyProvider")]
[Order(Before="default")]
internal class ToTheEndKeyProvider : IKeyProcessorProvider
{
    [ImportingConstructor]
    public ToTheEndKeyProvider()
    {
    }
    public KeyProcessor GetAssociatedProcessor(IWpfTextView wpfTextView)
    {
        if (wpfTextView == null)
            return null;
        return new ToTheEndKeyProcessor(wpfTextView,wpfTextView.TextBuffer) as KeyProcessor;
    } 
}
class ToTheEndKeyProcessor : KeyProcessor
{
    IWpfTextView view { get; set; }
    ITextBuffer buffer { get; set; }
    public ToTheEndKeyProcessor(IWpfTextView wpfTextView,ITextBuffer textBuffer)
    {
        this.view = wpfTextView;
        this.buffer = textBuffer;
    }
    public override void PreviewKeyDown(KeyEventArgs e)
    {                            
        if (e.Key.Equals(Key.Enter))
        {
             e.Handled = true;
        }
    }
}

问题是:

  • 当覆盖PreviewKeyDown/KeyDown时,输入key not fire,其他key也可以
  • 当覆盖PreviewKeyUp/KeyUp时,输入key-fired,但e.Handled=true不能抑制默认行为

我也尝试过PreviewTextInput,但它似乎可以得到'''r'字符。有没有任何解决方案可以在没有KeyProcessor的情况下处理与编辑器的键事件。

visualstudio扩展键处理器,禁止输入键';的默认行为

我也有同样的问题。

我还没有找到用KeyProcessor处理回车键输入的方法,但通过实现IOleCommandTarget,我可以处理它。请参阅以下文章:

http://www.alashiban.com/multi-editing-tutorial/