2012-01-25 92 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

非常感谢!有效!!! –

相关问题