.net – Silverlight:查找布局中所有类型的控件

.net – Silverlight:查找布局中所有类型的控件,第1张

概述我正在寻找一种可靠的方法来构建< Type>的控件列表包含在特定< Panel>中的派生控制 – 包括那些直接的孩子,以及那些孩子的孩子等等. 最明显的方法是递归地执行: 添加以列出< Type>的此控件的所有子项,然后对该控件的任何子项重复函数,该控件是< Panel>或后代. 但是我担心这不会在树中找到所有控件 – 任何ContentControl也可以包含< Type>的控件,就像Heade 我正在寻找一种可靠的方法来构建< Type>的控件列表包含在特定< Panel>中的派生控制 – 包括那些直接的孩子,以及那些孩子的孩子等等.

最明显的方法是递归地执行:
添加以列出< Type>的此控件的所有子项,然后对该控件的任何子项重复函数,该控件是< Panel>或后代.

但是我担心这不会在树中找到所有控件 – 任何ContentControl也可以包含< Type>的控件,就像headeredContentControl或具有一个或多个子/内容属性的任何其他类似控件一样.

是否有任何方法可以对实际布局树执行搜索,以便可以找到没有特定父级的特定控件类型的任何实例?

解决方法 这是一个相当天真的扩展方法: –

public static class VisualTreeEnumeration{   public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)   {     int count = VisualTreeHelper.GetChildrenCount(root);     for (int i=0; i < count; i++)     {       var child = VisualTreeHelper.GetChild(root,i);       yIEld return child;       foreach (var descendent in Descendents(child))         yIEld return descendent;     }   }}

这种方法确实有一个缺点,它假设树成员资格在进行中没有发生变化.这可以通过使用ToList()来减少使用.

现在,您可以使用liNQ实现您的要求: –

var qryAllbuttons = myPanel.Descendents().OfType<button>();
总结

以上是内存溢出为你收集整理的.net – Silverlight:查找布局中所有类型的控件全部内容,希望文章能够帮你解决.net – Silverlight:查找布局中所有类型的控件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1002781.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存