2

要素がDataTemplateの一部であり、要素のタブインデックスが一意に定義されている場合、要素を取得したり、そのタブインデックス(TextBoxなど)にフォーカスを設定したりすることはできますか?

4

1 に答える 1

4

VisualTreeHelperを使用して、テンプレートを介して作成された任意の要素を検索できます。
したがって、既存の要素のTabIndexを確認して、目的の要素を見つけることができます(tab-indexが本当に一意である場合:)。DataTemplateと名前のフィルターで要素に名前を付けることもできます。

次の関数を使用すると、特定のタイプのビジュアルツリーのすべての要素を検索できます。

void FindChildFrameworkElementsOfType<T>(DependencyObject parent,IList<T> list) where T: FrameworkElement{             
    DependencyObject child; 
    for(int i=0;i< VisualTreeHelper.GetChildrenCount(parent);i++){             
        child = VisualTreeHelper.GetChild(parent, i); 
        if (child is T) { 
            list.Add((T)child); 
        } 
        FindChildFrameworkElementsOfType<T>(child,list); 
    } 
}

次のように呼び出します。

List<TextBox>  textBoxList=new List<TextBox>();
FindChildFrameworkElementsOfType<TextBox>(rootObject,textBoxList);

rootObjectウィンドウやベースコントロールなどのルートオブジェクトはどこにありますか。すべてのテキストボックスのリストが表示され、このリストでタブインデックスまたはチェックしたいプロパティをチェックできます。
この関数を呼び出す前に、ツリーを構築する必要があることに注意してください。また、リストでのUI仮想化など、上記のパターンが機能しない状況もあります。

于 2011-02-19T09:14:12.520 に答える