フォーカス設定の話:ユーザーによって or プログラムによって(UWP/C#)

 プログラムによってコントロールにフォーカス設定したい時は次のように記述します。

control.Focus(FocusState.Programmatic);

 さてこのフォーカスを当てたいコントロールについてですが、当然、プログラムだけでなくユーザーの手によってもフォーカス設定できるはずです。
 処理の内容によっては、フォーカス設定がプログラムによってなされたのかユーザーの手によってなされたのかを判定したいこともあると思います。
 GotFocusイベント内で、このコントロールのFocusStateをチェックすれば良さそうなものですが、デバッグしてみると上手くいきません。Programmaticで設定したはずなのに、判定時にはKeyboardになってしまいます。

 いろいろ調べた結果、ここにそれっぽいことが書かれていました。詳しいことはよく分かりませんが、とりあえずある条件下では、「Programmaticを設定しても判定時にはPointerかKeyboardになりまっせ」とのことで。
 それは困る! と思いいろいろ試した結果、GotFocusイベントじゃなくて「GettingFocus」イベントならProgrammaticをちゃんと判定できることが分かりましたとさ。

溟犬一六(Ichiro Meiken)
  • 溟犬一六(Ichiro Meiken)
  • フリーランスのWEBクリエイター。小説、ゲーム、アプリなど幅広く活動中。
    Twitter : @dawn_gabacho