C# 使用谓词条件搜索元素

C# 使用谓词条件搜索元素,c#,wpf,enumeration,visualtreehelper,C#,Wpf,Enumeration,Visualtreehelper,如何通过谓词在VisualTree中找到框架元素? 诸如此类: public static FrameworkElement FindChild(FrameworkElement root, Predicate<> predicate) { ... } 提前谢谢你的帮助 的答案描述了在可视化树中查找控件的许多方法 谓词版本是作为链接提供的。因此真正的问题是如何迭代给定“根”元素的所有子元素。 因为这样您就可以调用该元素的谓词并选择所需的谓词。 因此,我认为您应该在这里区分两种

如何通过谓词在VisualTree中找到框架元素? 诸如此类:

public static FrameworkElement FindChild(FrameworkElement root, Predicate<> predicate)
{
   ...
}
提前谢谢你的帮助

的答案描述了在可视化树中查找控件的许多方法


谓词版本是作为链接提供的。

因此真正的问题是如何迭代给定“根”元素的所有子元素。 因为这样您就可以调用该元素的谓词并选择所需的谓词。 因此,我认为您应该在这里区分两种不同的工作流—一种—当元素是Panel时,您应该首先传入它,然后迭代它的Children属性并传入其中的每一个(递归和非递归都可以,但您应该深入到树中,并在这两种情况下通过级别返回)。对于非面板元素,只需将该元素传递给谓词。 您还应该考虑元素,它们具有“Content”属性(我假设这是在某个基类型中定义的,我不记得是哪一个基类型),因此以相同的方式检查Content元素。就这些

问候,,
Artak

您可以使用LINQ查找特定类型的控件,可能如下所示:

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

您应该调用方法
FindSingleChild
或返回一个IEnumerable的FrameworkElements。毕竟,谓词可以由多个子项匹配。
List<Button> btns = Controls.OfType<Button>().ToList();