3

選択されたタブがインデックス 1 (中央のタブ) である、3 つのタブを持つ既に読み込まれてレンダリングされた TabControl を検討します。

タブ 1: TextBox が 1 つある

タブ 2: 2 つの TextBox がある

タブ 3: 3 つの TextBox がある

VisualTreeHelper を使用して selectedItem のビジュアル ツリーを反復処理すると、TabControl の子内に 2 つの textBoxes が取得されます。

タブの選択が変更されたときにもう一度繰り返し、新しいタブのコントロールにアクセスしたい。タブ インデックス 2 に切り替えると、VisualTreeHelper を使用して 3 つのテキスト ボックスを見つける必要があります。

通常の解決策は、selection changed イベントをサブスクライブし、ツリーを調べて新しく表示されたコントロールを取得することです。問題は、現時点ではビジュアル ツリーに古いタブが残っているため、この検索の価値がないことです。

新しい TabItem が表示され、検索をトリガーする瞬間を傍受するにはどうすればよいですか?

ContentControl テンプレートの変更または TabControl で選択されたタブの変更によって変更された場合でも、特定の UI のすべての入力コントロールを監視する動的検証エンジンを作成しています...画像が得られることを願っています。

何か案は?

4

2 に答える 2

2

1 つの解決策は、以下を使用してタブが完全に読み込まれるまでアクセスを遅らせることですDispatcher.BeginInvoke

private void TabControlSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded,
                                (Action)(() =>
                                {
                                    // access the new tab's visual tree here
                                }));
}

UsingDispatcherPriority.Loadedは、ビジュアル ツリーにアクセスする前に新しいタブを読み込む必要があることを意味します。

于 2013-09-27T18:38:44.567 に答える
0

TabControlは、タブを切り替えるときにアイテムをロード/アンロードするため、TabItemのLoadedイベントに検証を添付できるはずです。

于 2010-10-29T18:56:40.313 に答える