2012-07-24 166 views
0

如何通过谓词在VisualTree中查找框架元素? 类似的东西:使用谓词条件搜索元素

public static FrameworkElement FindChild(FrameworkElement root, Predicate<> predicate) 
{ 
    ... 
} 

我goint使用它类似的东西:

Button btn = FindChild(MainForm, element => element is Button); 

感谢您的帮助提前!

+0

你应该调用你的方法'FindSingleChild'或返回FrameworkElements的IEnumerable 。毕竟,谓词可以由多个孩子匹配。 – Heinzi 2012-07-24 09:33:37

+0

Thx为您提供建议。 – 2012-07-24 11:58:01

回答

1

您可以使用LINQ找出特定类型的控件,也许是这样的:

List<Button> btns = Controls.OfType<Button>().ToList(); 
0

this SO question的回答描述了在可视树中查找控件的很多方法。

谓词版本在那里给出链接this

1

那么真正的问题是如何迭代给定“根”元素的所有孩子。 因为那样你就可以调用你的谓词并选择那些你想要的元素。 所以我想你应该在这里区分两种不同的工作流程 - 一种 - 当元素是Panel时,你应该先传入它,然后迭代它的Children属性并传入其中的每一个(递归和非递归都可以工作,但你应该深入树木,并在两种情况下回到水平)。而在非面板元素的情况下,只需将该元素传递给谓词即可。 你也应该考虑有“内容”属性的元素(我想这是在一些基本类型中定义的,我不记得哪一个是基本类型),所以请以同样的方式检查内容元素。就这样。

问候, Artak