我有启用了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控件将处理enter击键,因此该事件不会“冒泡”到HandleInput方法。
您可以改用PreviewKeyDown
使用事件隧道,这与事件冒泡相反。