简体   繁体   中英

adding tabs to tabcontrol from inside usercontrol

How can I add tabs to a tabcontrol that exists in one usercontrol from another usercontrol that is contained within a tab itself?? Can I do it without passing in the tabcontrol as a parameter in the constructor, perhaps via some static global method?

I've tried

public static ObservableTabCollection FindCollectionFromUC(this DependencyObject depObject)
        {
            bool loop = true;
            var parent = (VisualTreeHelper.GetParent(depObject) as FrameworkElement);
            while (loop)
            {
                if (parent.GetType() is typeof(TabControl))
                {
                    loop = false;
                    return ((ObservableTabCollection)((TabControl)parent).ItemsSource);
                }
                parent = parent.GetParent() as FrameworkElement;
            }
            return null;
        }

==== EDIT ==== The Solution was this:

            bool loop = true;
            var parent = depObject as FrameworkElement;

            while (loop)
            {
                if (parent != null)
                {
                    parent = VisualTreeHelper.GetParent(parent) as FrameworkElement;
                    var type = parent.GetType();
                    if (parent.GetType() == typeof(TabControl))
                        {
                            loop = false;
                            return ((ObservableTabCollection)((TabControl)parent).ItemsSource);
                        }
                }
                else { loop = false; }
            }
            return null;

The UserControl will need some means of finding the TabControl. You could pass an instance, as one option (probably the most robust). Alternatively, you could use some form of Dependency Injection or a service to retrieve the correct TabControl.

The other option, though potentially brittle, would be to navigate up the tree until you find a TabControl. FrameworkElement (of which UserControl and other panels derive) defines a Parent property. This would potentially allow you to walk up and find the TabControl instance containing this UserControl.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM