使用谓词条件搜索元素

时间:2012-07-24 09:31:52

标签: c# wpf enumeration visualtreehelper

如何通过谓词在VisualTree中找到框架元素? 这样的事情:

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

我会这样使用它:

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

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

那么真正的问题是如何通过给定“root”元素的所有子元素进行迭代。 因为那时你将能够为该元素调用谓词并选择你想要的那个。 所以我想你应该在这里区分两个不同的工作流 - 一个 - 当元素是Panel时,你应该首先传入它,然后迭代它的Children属性并传入其中的每一个(递归和非递归都可以工作,但是你应该深入树,并在两种情况下通过水平回来)。在非面板元素的情况下,只需将那个元素传递给谓词。 另外你应该考虑具有“Content”属性的元素(我想这是在一些基类型中定义的,我不记得哪一个),所以检查内容元素的方式是否相同。这就是全部。

此致 Artak

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

谓词版本作为this的链接。