由於您的目標是映射箭頭鍵來執行某些鍵盤選項卡導航,因此您應該將相應的命令映射到鍵並實施它們。 ComponentCommands.MoveFocusForward
和ComponentCommands.MoveFocusBack
命令在這裏是合適的,因爲這正是我們正在做的,將焦點轉移到下一個或回到先前的控制。
下面是一個例子,你可以做到這一切。
首先,您需要將命令綁定到您的密鑰。
<Window.CommandBindings>
<CommandBinding Command="ComponentCommands.MoveFocusForward" Executed="MoveFocusForward_Executed" />
<CommandBinding Command="ComponentCommands.MoveFocusBack" Executed="MoveFocusBack_Executed" />
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Command="ComponentCommands.MoveFocusForward" Key="Right" />
<KeyBinding Command="ComponentCommands.MoveFocusBack" Key="Left" />
</Window.InputBindings>
然後執行處理程序。
private static bool RequestFocusChange(FocusNavigationDirection direction)
{
var focused = Keyboard.FocusedElement as UIElement;
if (focused != null)
{
return focused.MoveFocus(new TraversalRequest(direction));
}
return false;
}
private void MoveFocusForward_Executed(object target, ExecutedRoutedEventArgs e)
{
RequestFocusChange(FocusNavigationDirection.Next);
}
private void MoveFocusBack_Executed(object target, ExecutedRoutedEventArgs e)
{
RequestFocusChange(FocusNavigationDirection.Previous);
}
不知道是否可以更改事件以指示不同的鍵;但您應該能夠將事件標記爲「處理」,然後使用重新映射的關鍵點創建一個新事件。 – EtherDragon
是的,這就是我上面所說的,但我擔心的是,通過將其標記爲「已處理」,我可能會失去其他內容,例如發佈,重複等。猜測是時候讓測試應用程序了! – MarqueIV
與其嘗試重新映射鍵,爲什麼不將鍵綁定到與「Tab」和「Shift-Tab」組合綁定的任何命令? –