2012-01-25 14 views
0

私はMainWindowコントロールと2つのユーザーコントロールを持っています。 Main WindowにはMainWindowのボタン検索をクリックするとUser ControlをロードするTab Controlがあります。このコードでメインウィンドウにタブ項目を追加することができました。既存のタブコントロールにタブ項目を追加する方法wpfのコントロール

private void search(object sender, RoutedEventArgs e) 
     { 

      tc.Visibility = Visibility.Visible; // It is hidden by default 
      TabItem tab = new TabItem(); 
      tab.Header = "Поиск"; 
      UCSearch c = new UCSearch(); // User Control 1 
      tab.Content = c; 
      tc.Items.Add(tab); 
     } 

タブコントロールにユーザーコントロール1が読み込まれているとき。ユーザーコントロール1にTetxboxとボタンがあります。ボタンをクリックしているときにユーザーコントロール2をロードします。しかし、私はユーザーコントロール1からメインウィンドウにあるタブコントロールにアクセスすることはできません。私に指示してください。どこを掘る?

答えて

1

エクステンションメソッドを使用して、のTabControlの親に対してVisualTreeを検索することができます。

拡張方法:あなたのボタンのハンドラで

public static class VisualTreeExtensions 
    { 

    public static T FindParent<T>(this DependencyObject child) 
    where T : DependencyObject 
    { 
     //get parent item 
     DependencyObject parentObject = VisualTreeHelper.GetParent(child); 

     //we've reached the end of the tree 
     if (parentObject == null) return null; 

     //check if the parent matches the type we're looking for 
     var parent = parentObject as T; 
     if (parent != null) 
     { 
     return parent; 
     } 
     else 
     { 
     return FindParent<T>(parentObject); 
     } 
    } 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var tabControl = (sender as Button).FindParent<TabControl>(); 
    tabControl.Items.Add(new TabItem() { Header = "New"}); 
} 

より良く、より柔軟な(だけでなく、より複雑な)ソリューションは、参加者に通知することです(ここではあなたのButtonは、それがクリックされたというメッセージを発し、他の人(あなたのTabControl)はそれを聞いて反応します(新しいTabを作成します)。 これは試験のためのものですMediatorパターンまたはEventAggregatorを使って行うことができます。

+0

ありがとうございます!出来た!!! –

関連する問題