WPF 中預設 Tab 鍵移動焦點,若需用 左右方向鍵 在按鈕間切換焦點,並在焦點離開時自動觸發該按鈕的 Click 事件,需處理 KeyDown/KeyUp 或 PreviewKeyDown 事件。
<Button x:Name="btn1" Content="按鈕1" KeyDown="Button_KeyDown" />
<Button x:Name="btn2" Content="按鈕2" KeyDown="Button_KeyDown" />
private void Button_KeyDown(object sender, KeyEventArgs e) {
if (e.Key == Key.Right || e.Key == Key.Left) {
var btn = sender as Button;
var request = new TraversalRequest(e.Key == Key.Right ? FocusNavigationDirection.Next : FocusNavigationDirection.Previous);
btn.MoveFocus(request);
e.Handled = true;
}
}
// 焦點離開時觸發 Click(可用 LostFocus 或 LostKeyboardFocus)
private void Button_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
var btn = sender as Button;
btn.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
MoveFocus 需容器支援邏輯焦點導航(如 StackPanel、Grid)。Click 事件應確認業務邏輯允許重複執行。此模式常用於觸控螢幕或遙控器操作的嵌入式 WPF 介面。