2018年4月8日日曜日

MoveFocusはCtrlキーと併用できない

WPFのコントロール間のフォーカス移動にMpoveFocus()を使っていたのですが、うまく動かないケースがあります。

このような画面で、以下のような画面を作成します。
タブAのボタンにはMoveFocusでフォーカス移動するようにしてあります。




private void Button_Click(object sender, RoutedEventArgs e)
{
 var ctl = Keyboard.FocusedElement as UIElement;
 if (ctl != null)
 {
  ctl.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
 }
}

これを普通に実行しても、何もおきません。

でも、Ctrlキーを押しながらボタンをクリックすると・・・

タブBに切り替わった!!

どうやら、TabControlは、Ctrl+Tabでタブの切り替えが発生するようです。
もしかして、MoveFocusメソッドで指定しているFocusNavigationDirection.NextがTabキーとして認識されている・・・?

この現象、フォーカスの移動先がTextBoxなどの場合は発生しなかったりなのですが、
もし、MoveFocusを使用することで予期しない動作をする場合は、確認していたほうがいいかも?