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
,它使用事件隧道,与事件冒泡相反。
我启用了 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
,它使用事件隧道,与事件冒泡相反。