1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TextBoxのフォーカスを解除する備忘録

Last updated at Posted at 2020-10-02

エンターキーが押されたらフォーカスを解除する等の処理の実装時、少しハマったので書いておく。
コントロールにcontrol.UnFocus()的なメソッドがあればよいのだが、残念ながらそのようなものはなかった。
まず、これを実装するために初めに思いつくのはKeyboard.ClearFocus()を使うことだが、これだとコントロールのLostFocusが呼ばれない。
では、どうするのかというと答えは単純である。
別のコントロールにフォーカスを当てればよい。
ただ、プログラムごとに特定のコントロールにフォーカスを当てる処理を書くのは個人的にスマートではないので、一般化しておく。
コード例を以下に示す。

Sample.cs
// コントロールのフォーカスを解除する
public void BreakFocus(Control control){
   DependencyObject ancestor = control.Parent; 
   while (ancestor != null)
   {
      // フォーカスできるか
      if (ancestor is UIElement element && element.Focusable)
      {
            element.Focus(); // フォーカスを当てる
            break;
      }
      ancestor = VisualTreeHelper.GetParent(ancestor);
   }
}

非常に単純である。フォーカス可能なコントロールが見つかるまでさかのぼって、当ててやるだけである。
これでコントロールのアンフォーカスが実装できた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?