如何向一个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;
答案 0 :(得分:1)
UserControl需要一些方法来查找TabControl。您可以传递一个实例,作为一个选项(可能是最强大的)。或者,您可以使用某种形式的依赖注入或服务来检索正确的TabControl。
另一个选项虽然可能很脆弱,但可以向上导航树,直到找到TabControl。 FrameworkElement(UserControl和其他面板派生的)定义了Parent属性。这可能允许您向上走,找到包含此UserControl的TabControl实例。