0

如何通过谓词在 VisualTree 中找到框架元素?类似的东西:

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

我将使用它:

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

提前感谢您的帮助!

4

3 回答 3

1

所以真正的问题是如何遍历给定“根”元素的所有子元素。因为这样您就可以调用该元素的谓词并选择您想要的那些。所以我想你应该在这里区分两种不同的工作流程 - 一个 - 当元素是 Panel 时,你应该首先将它传入,然后遍历它的 Children 属性并传入其中的每一个(递归和非递归都可以工作,但是您应该更深入地了解树,并在两种情况下都通过关卡返回)。如果是非面板元素,只需将该元素传递给谓词。您还应该考虑具有“内容”属性的元素(我想这是在某些基本类型中定义的,我不记得是哪一个),因此以相同的方式检查内容元素。就这样。

问候, 阿尔塔克

于 2012-07-24T09:40:56.397 回答
1

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

List<Button> btns = Controls.OfType<Button>().ToList();
于 2012-07-24T09:50:45.727 回答
0

这个 SO question的答案描述了在可视化树中查找控件的多种方法。

谓词版本在此处作为指向this的链接给出。

于 2012-07-24T09:36:08.187 回答