首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按类类型访问对象?

如何按类类型访问对象?
EN

Stack Overflow用户
提问于 2019-07-10 11:19:33
回答 1查看 109关注 0票数 0

我正在开发WPF应用程序。在我的应用程序中,我希望按类类型访问对象。

我尝试了下面的代码块。

代码语言:javascript
运行
复制
  public static IEnumerable<T> FindVisualChildren<T>(DependencyObject 
    depObj) where T : DependencyObject
  {
    if (depObj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
            if (child != null && child is T)
            {
                yield return (T)child;
            }

            foreach (T childOfChild in FindVisualChildren<T>(child))
            {
                yield return childOfChild;
            }
        }
    }
  }

在我的申请中,我使用了以下方式。

代码语言:javascript
运行
复制
foreach (Storyboard sb in FindVisualChildren<Storyboard>(window))
{
     // There is no accessable storyboard object
}

我可以访问Control对象,但不能访问非UIElement对象。例如:我可以找到RadioButton,但找不到Storyboard对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 13:01:48

正如注释中提到的,Storyboard不是添加到可视树中的可视化元素,因此VisualTreeHelper将无法找到它。

但是可以将所有Storyboards添加到窗口的Resources字典中,并遍历资源:

代码语言:javascript
运行
复制
Storyboard sb1 = new Storyboard();
Storyboard sb2 = new Storyboard();
...
Resources.Add("sb1", sb1);
Resources.Add("sb2", sb2);
...
foreach (Storyboard sb in Resources.Values.OfType<Storyboard>())
{
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56969604

复制
相关文章

相似问题

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