10

WPF アプリケーションですべての UI 要素のタブ ストップをプログラムでナビゲートする方法を誰か教えてもらえますか? 最初のタブ ストップから始めて、対応する要素をスニッフィングし、次のタブ ストップにアクセスして、対応する要素をスニッフィングし、最後のタブ ストップに到達するまで繰り返します。

ありがとう - マイク

4

2 に答える 2

29

フォーカスに関するすべてを説明しているこの MSDN の記事に示されているように、MoveFocus を使用してそれを行います:フォーカスの概要

次のフォーカスされた要素に到達するためのサンプル コードを次に示します (その記事から取得し、わずかに変更しました)。

// MoveFocus takes a TraversalRequest as its argument.
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);

// Gets the element with keyboard focus.
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;

// Change keyboard focus.
if (elementWithFocus != null) 
{
    elementWithFocus.MoveFocus(request);
}
于 2009-04-30T22:41:02.643 に答える
1

これは、MoveFocus呼び出しで実行できます。現在フォーカスされているアイテムは、FocusManagerから取得できます。次のコードは、ウィンドウ内のすべてのオブジェクトを繰り返し、それらをリストに追加します。これにより、フォーカスが切り替わってウィンドウが物理的に変更されることに注意してください。ウィンドウがアクティブでない場合、コードは機能しない可能性があります。

// Select the first element in the window
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));

TraversalRequest next = new TraversalRequest(FocusNavigationDirection.Next);
List<IInputElement> elements = new List<IInputElement>();

// Get the current element.
UIElement currentElement = FocusManager.GetFocusedElement(this) as UIElement;
while (currentElement != null)
{
    elements.Add(currentElement);

    // Get the next element.
    currentElement.MoveFocus(next);
    currentElement = FocusManager.GetFocusedElement(this) as UIElement;

    // If we looped (If that is possible), exit.
    if (elements[0] == currentElement)
        break;
}
于 2009-04-30T22:48:58.287 に答える