2012-01-25 158 views
0

我有MainWindow和2個用戶控件。在主窗口中,如果在MainWindow中單擊按鈕搜索,則會出現加載用戶控件的選項卡控件。我可以通過此代碼在主窗口中添加選項卡項目。如何將選項卡項目添加到現有的選項卡控件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標籤項被加載。在用戶控制中有Tetxbox和Button 1.我想在單擊按鈕時加載用戶控件2。但是我無法訪問用戶控制1中主窗口中的Tab Control。請給我指示。在哪裏挖?

回答

1

您可以使用擴展方法在VisualTree中搜索類型的父項TabControl

例如

擴展方法:

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

非常感謝!有效!!! –

相關問題