【问题标题】:adding tabs to tabcontrol from inside usercontrol从用户控件内部将选项卡添加到选项卡控件
【发布时间】:2010-06-17 18:14:13
【问题描述】:

如何从包含在选项卡本身中的另一个用户控件向一个用户控件中存在的选项卡控件添加选项卡? 我可以通过一些静态全局方法而不将 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;

【问题讨论】:

    标签: c# wpf silverlight tabcontrol


    【解决方案1】:

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

    另一个选项虽然可能很脆弱,但会向上导航直到找到 TabControl。 FrameworkElement(UserControl 和其他面板派生的)定义了一个Parent 属性。这可能会允许您向上走并找到包含此 UserControl 的 TabControl 实例。

    【讨论】:

    • 整个app只有一个tabcontrol,所以我只需要找一个。你能举一个实现的例子吗?
    • 只需递归遍历“父”属性,直到对象是 TabControl。
    • 我发现的只是一个内容呈现器,但没有标签控件
    • 对不起,我解释得不好 - 我检查了它,但它是这样的 -UserControl -> TabItem -> TabPanel -> Grid -> Grid -> Grid -> null
    • 我的问题是我实际上并没有使用 VisualTreeHelper 来爬取 VisualTree DependencyObject.Parent 的返回值与 VisualTreeHelpe.GetParent(DependencyObject) 不同
    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多