locked
Silverlightコントロールのフォーカス移動について RRS feed

  • 質問

  • WPFではコントロールのメソッドにMoveFocus()が用意されており、
    たとえばEnterキーでのフォーカス移動がコントロール内で閉じて実現できていました。
    (カスタムコントロールにすれば、そのコントロールを使う側はフォーカス制御を意識しなくてよい)

    SilverlightではMoveFocusメソッドは存在しないようですが、何か他の代替手段は提供されているのでしょうか?

    やりたい事
    ・TextBoxでEnterが入力された場合、Tabキーを入力した場合と同様な動作を実現したい。

    初歩的な質問かと存じますが、よろしくお願いします。
    2010年3月17日 5:19

回答

  • 勘違いしており、失礼いたしました。m(_ _)m

    とりあえず無さそうな感じです。少なくともSilverlight2までは無いことが以下からわかります。

    WPF MoveFocus(TraversalRequest) in Silverlight?
    http://forums.silverlight.net/forums/p/23746/84711.aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク aktkn 2010年3月17日 9:24
    2010年3月17日 8:57
    モデレータ
  • MoveFocusの代わりになる機能は無さそうなので、自力でフォーカスを移動するコントロールを探すことになると思いますが、その際に VisualTreeHelper というクラスを使えば、コントロールの親要素や子要素を簡単に取得できます。

    http://msdn.microsoft.com/en-us/library/system.windows.media.visualtreehelper(VS.95).aspx

    あとは for ループで目的のコントロールを探せばいいと思います。


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 編集済み なかむら 2010年3月17日 9:16 リンクを修正
    • 回答としてマーク aktkn 2010年3月17日 9:24
    2010年3月17日 9:13

すべての返信

  • Focusメソッドがあります。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年3月17日 8:15
    モデレータ
  • Silverlight3ではMoveFocusのような
    「次(前)のTabOrderのコントロールにFocus」という処理を
    手軽に行う方法は私も見つけられませんでした。
    おそらく無さそうです。
    2010年3月17日 8:34
  • 勘違いしており、失礼いたしました。m(_ _)m

    とりあえず無さそうな感じです。少なくともSilverlight2までは無いことが以下からわかります。

    WPF MoveFocus(TraversalRequest) in Silverlight?
    http://forums.silverlight.net/forums/p/23746/84711.aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク aktkn 2010年3月17日 9:24
    2010年3月17日 8:57
    モデレータ
  • MoveFocusの代わりになる機能は無さそうなので、自力でフォーカスを移動するコントロールを探すことになると思いますが、その際に VisualTreeHelper というクラスを使えば、コントロールの親要素や子要素を簡単に取得できます。

    http://msdn.microsoft.com/en-us/library/system.windows.media.visualtreehelper(VS.95).aspx

    あとは for ループで目的のコントロールを探せばいいと思います。


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 編集済み なかむら 2010年3月17日 9:16 リンクを修正
    • 回答としてマーク aktkn 2010年3月17日 9:24
    2010年3月17日 9:13
  • ありがとうございました。

    やはり自力で実装する以外なさそうですね。

    実装するなら、
    ・VisualTreeを巡回して要素とそのTabIndexを収集しておく
    ・任意のTabIndexの次(又は前)のTabIndexを持つ要素を返す
    という感じでしょうか。

    要素数が数百規模になった場合のレスポンスが気になるところですが。


    少し気になっているのは、Tabキーで実現できている動作なのでTab入力のエミュレートが
    Enter入力時にできればスマートな解になるのではないか。ということです。

    2010年3月17日 9:39