Caliburn.Micro обнаружить текстовое поле ввода с модификатором - PullRequest
1 голос
/ 12 января 2020

У меня есть текстовое поле с включенным 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, он должен что-то сделать с вводом, но вставить новый линия каждый раз.

1 Ответ

2 голосов
/ 12 января 2020

Это потому, что KeyDown использует всплывающее событие, что означает, что событие сначала вызывается в элементе управления, а затем в его родительском элементе, а также в родительском элементе этого родителя и т. Д., Пока событие не будет обработано.

Если для AcceptsReturn задано значение true, элемент управления TextBox обрабатывает нажатие клавиши ввода, чтобы событие не «всплыло» в методе HandleInput.

Вместо него можно использовать PreviewKeyDown, в котором используется туннелирование событий, противоположность пузырям событий.

...