首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP VisualTreeHelper错误参数参考

UWP VisualTreeHelper错误参数参考
EN

Stack Overflow用户
提问于 2019-09-06 10:01:42
回答 1查看 176关注 0票数 0

我想修改TabItem中的TabView内容。TabItem使用DataTemplate

当我试图访问该项目的子女时,如下所示:

代码语言:javascript
复制
        var container = tabview.ContainerFromIndex(tabview.SelectedIndex);
        int count = VisualTreeHelper.GetChildrenCount(container);

我拿到了第二行的ArgumentException: Wrong Parameter Reference。我应该如何使用VisualTreeHelper来修改它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-06 11:48:15

下面是一个简单的方法:

代码语言:javascript
复制
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。你可以这样写:

代码语言:javascript
复制
var target = GetChildObject<TextBlock>(container,"TargetEle");

更新

我测试了您的代码,发现您没有捕获页面加载的事件。

实际上,SelectionChanged事件是在刚刚创建TabView时触发的,但可视化树尚未加载,您无法通过代码从它获取内容。您可以在页面中创建IsLoaded属性,在页面加载时将其设置为True,并在SelectionChanged时间内确定此属性。

只有当它是真实的,继续下一步。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57819847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档