我想修改TabItem中的TabView内容。TabItem使用DataTemplate。
当我试图访问该项目的子女时,如下所示:
var container = tabview.ContainerFromIndex(tabview.SelectedIndex);
int count = VisualTreeHelper.GetChildrenCount(container);我拿到了第二行的ArgumentException: Wrong Parameter Reference。我应该如何使用VisualTreeHelper来修改它?
发布于 2019-09-06 11:48:15
下面是一个简单的方法:
public static T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
{
DependencyObject child = null;
T grandChild = null;
for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
{
child = VisualTreeHelper.GetChild(obj, i);
if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name)))
{
return (T)child;
}
else
{
grandChild = GetChildObject<T>(child, name);
}
if (grandChild != null)
{
return grandChild;
}
}
return null;
}从您的描述中,您可以获得目标元素的容器。让我们假设您需要的元素名为TargetEle,类型为TextBlock。你可以这样写:
var target = GetChildObject<TextBlock>(container,"TargetEle");更新
我测试了您的代码,发现您没有捕获页面加载的事件。
实际上,SelectionChanged事件是在刚刚创建TabView时触发的,但可视化树尚未加载,您无法通过代码从它获取内容。您可以在页面中创建IsLoaded属性,在页面加载时将其设置为True,并在SelectionChanged时间内确定此属性。
只有当它是真实的,继续下一步。
https://stackoverflow.com/questions/57819847
复制相似问题