簡體   English   中英

WPF阻止按鈕獲得焦點時執行命令

[英]WPF prevent execute command when button got focus

我有文本框和按鈕的應用程序。 當我在文本框中單擊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"); });
    }

如何在不執行命令的情況下將焦點設置在按鈕上? 謝謝

設置焦點后,仍會啟用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;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM