使用谓词条件搜索元素
问题描述:
如何通过谓词在VisualTree中查找框架元素? 类似的东西:使用谓词条件搜索元素
public static FrameworkElement FindChild(FrameworkElement root, Predicate<> predicate)
{
...
}
我goint使用它类似的东西:
Button btn = FindChild(MainForm, element => element is Button);
感谢您的帮助提前!
答
您可以使用LINQ找出特定类型的控件,也许是这样的:
List<Button> btns = Controls.OfType<Button>().ToList();
答
那么真正的问题是如何迭代给定“根”元素的所有孩子。 因为那样你就可以调用你的谓词并选择那些你想要的元素。 所以我想你应该在这里区分两种不同的工作流程 - 一种 - 当元素是Panel时,你应该先传入它,然后迭代它的Children属性并传入其中的每一个(递归和非递归都可以工作,但你应该深入树木,并在两种情况下回到水平)。而在非面板元素的情况下,只需将该元素传递给谓词即可。 你也应该考虑有“内容”属性的元素(我想这是在一些基本类型中定义的,我不记得哪一个是基本类型),所以请以同样的方式检查内容元素。就这样。
问候, Artak
你应该调用你的方法'FindSingleChild'或返回FrameworkElements的IEnumerable 。毕竟,谓词可以由多个孩子匹配。 – Heinzi 2012-07-24 09:33:37
Thx为您提供建议。 – 2012-07-24 11:58:01