добавление вкладок в tabcontrol изнутри usercontrol - PullRequest
3 голосов
/ 17 июня 2010

Как я могу добавить вкладки в tabcontrol, который существует в одном пользовательском контроле из другого usercontrol, который содержится в самой вкладке ??Могу ли я сделать это без передачи tabcontrol в качестве параметра в конструкторе, возможно, с помощью какого-то статического глобального метода?

Я пробовал

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;
        }

==== РЕДАКТИРОВАТЬ==== Решение было таким:

            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;

1 Ответ

1 голос
/ 17 июня 2010

UserControl потребуются некоторые средства для поиска TabControl.Вы можете передать экземпляр как один из вариантов (возможно, самый надежный).В качестве альтернативы вы можете использовать некоторую форму Dependency Injection или службу для получения правильного TabControl.

Другой вариант, хотя и потенциально хрупкий, будет заключаться в перемещении вверх по дереву, пока вы не найдете TabControl.FrameworkElement (из которого происходит UserControl и другие панели) определяет свойство Parent .Это потенциально позволит вам подойти и найти экземпляр TabControl, содержащий этот UserControl.

...