Dav*_*vid 7 .net silverlight controls children silverlight-3.0
我正在寻找一种可靠的方法来构建一个包含在特定<Panel>派生控件中的<Type>控件列表 - 这包括那些直接子节点,以及那些是子节点的子节点等等.
最明显的方法是递归地执行:
添加列出<Type>的此控件的任何子项,然后为此控件的任何子项重复函数,该控件是<Panel>或descendant.
但是我担心这不会在树中找到所有控件 - 任何ContentControl也可能包含<Type>的控件,HeaderedContentControl或具有一个或多个子/内容属性的任何其他类似控件也是如此.
是否有任何方法可以对实际布局树执行搜索,以便可以找到没有特定父级的特定控件类型的任何实例?
Ant*_*nes 20
这是一个相当天真的扩展方法: -
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法确实有缺点,它假设树成员资格在进行中没有发生变化.这可以通过使用ToList()来减轻使用.
现在,您可以使用LINQ实现您的要求: -
var qryAllButtons = myPanel.Descendents().OfType<Button>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7703 次 |
| 最近记录: |