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的情况下处理与编辑器的键事件。
我也有同样的问题。
我还没有找到用KeyProcessor处理回车键输入的方法,但通过实现IOleCommandTarget,我可以处理它。请参阅以下文章:
http://www.alashiban.com/multi-editing-tutorial/