Caliburn.Micro 检测带有修饰符的文本框输入

Caliburn.Micro detect textbox enter with modifier

我启用了 AcceptsReturn 的文本框。我想在按 Shift + Enter 后插入一个新行。 文本框 XAML 看起来像这样:

...
AcceptsReturn="True"
cal:Message.Attach="[Event KeyDown] = [Action HandleInput($eventArgs)]"

HandleInput方法:

public void HandleInput(KeyEventArgs keyArgs)
 {
  if (keyArgs.Key == Key.Enter && Keyboard.Modifiers != ModifierKeys.Shift)
   { ...

当我只按 Enter 时,它应该会输入一些内容,但每次都会插入新行。

这是因为KeyDown使用了事件冒泡,这意味着事件首先在控件上引发,然后是它的父级,然后是父级的父级等等,直到事件被处理。

当您将 AcceptsReturn 设置为 true 时,TextBox 控件会处理输入击键,因此事件不会 "bubbled" 到 HandleInput 方法。

您可以使用 PreviewKeyDown,它使用事件隧道,与事件冒泡相反。