c# - 从用户控件内部向 tabcontrol 添加选项卡

标签 c# wpf silverlight tabcontrol

如何从包含在选项卡本身中的另一个用户控件向存在于一个用户控件中的选项卡控件添加选项卡? 我是否可以在不将 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;

最佳答案

UserControl 需要一些方法来找到 TabControl。您可以传递一个实例,作为一个选项(可能是最强大的)。或者,您可以使用某种形式的依赖注入(inject)或服务来检索正确的 TabControl。

另一种选择(虽然可能很脆弱)是向上导航树,直到找到 TabControl。 FrameworkElement(从中派生出 UserControl 和其他面板)定义了一个 Parent属性(property)。这可能允许您走上去找到包含此 UserControl 的 TabControl 实例。

关于c# - 从用户控件内部向 tabcontrol 添加选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064365/

相关文章:

c# - IEnumerable 现在是否比 IReadOnlyList 更防水?

c# - 如何为多个项目更新 Nuget 包?

c# - MVC 模拟 (Moq) - HttpContext.Current.Server.MapPath

c# - 在可见性更改时激活 Storyboard

c# - 使用 XAML 数据绑定(bind)将 Line 的每一端绑定(bind)到 Canvas 上两个形状的中心

C# 泛型、接口(interface)和继承

wpf - 像 VLC 一样的音量 slider

c# - 为什么纯 IEnumerable 的内容对于 WPF DataGrid 是不可见的?

wpf - 在 XAML 中从菱形的偏斜因子创建偏斜 AngleY

c# - 具有匿名类型的 Silverlight 4 数据绑定(bind)