WPF предотвращает выполнение команды, когда кнопка получила фокус - PullRequest
0 голосов
/ 10 октября 2018

У меня есть приложение с текстовым полем и кнопкой.Когда я нажимаю ENTER в текстовом поле, я хотел бы установить фокус на кнопке (используя обход), но когда кнопка получила фокус, выполните команду.Я не хочу выполнять команду, когда кнопка получила фокус.Вот мой код:

View1.xaml

<TextBox PreviewKeyDown="UIElement_OnPreviewKeyDown"/>

View1.xaml.cs

 private void UIElement_OnPreviewKeyDown(object sender, KeyEventArgs e)
 {
    if (e.Key != Key.Return) return;
    TraversalRequest tRequest = new TraversalRequest(FocusNavigationDirection.Next);
    UIElement keyboardFocus = Keyboard.FocusedElement as UIElement;
    keyboardFocus?.MoveFocus(tRequest);
 }

View2.xaml

<Button Content="Testbutton" Command="{Binding TestCommand}"/>

View2Vm

   class View2Vm : BaseVm
    {
      public RelayCommand TestCommand { get; set; }

      public View2Vm() 
        => TestCommand = new RelayCommand(x => { MessageBox.Show("Message"); });
    }

Как установить фокус на кнопку без выполнения команды?Спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Событие KeyDown все еще включено, когда фокус был установлен.Решение:

 private void UIElement_OnPreviewKeyDown(object sender, KeyEventArgs e)
 {
    if (e.Key != Key.Return) return;
    TraversalRequest tRequest = new TraversalRequest(FocusNavigationDirection.Next);
    UIElement keyboardFocus = Keyboard.FocusedElement as UIElement;
    keyboardFocus?.MoveFocus(tRequest);
    e.Handled = true;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...