我正在开发一个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;
}
}
}
问题在于:
我也试过了PreviewTextInput,但似乎可以得到'\ r'char。 是否有任何解决方案可以在没有KeyProcessor的情况下处理编辑器的关键事件。
答案 0 :(得分:0)
我有完全相同的问题。
我还没有找到使用KeyProcessor处理Enter / Return键输入的方法,但是通过实现IOleCommandTarget,我可以处理它。 请参考以下文章: