如何通过谓词在VisualTree中找到框架元素? 这样的事情:
public static FrameworkElement FindChild(FrameworkElement root, Predicate<> predicate)
{
...
}
我会这样使用它:
Button btn = FindChild(MainForm, element => element is Button);
提前感谢您的帮助!
答案 0 :(得分:1)
那么真正的问题是如何通过给定“root”元素的所有子元素进行迭代。 因为那时你将能够为该元素调用谓词并选择你想要的那个。 所以我想你应该在这里区分两个不同的工作流 - 一个 - 当元素是Panel时,你应该首先传入它,然后迭代它的Children属性并传入其中的每一个(递归和非递归都可以工作,但是你应该深入树,并在两种情况下通过水平回来)。在非面板元素的情况下,只需将那个元素传递给谓词。 另外你应该考虑具有“Content”属性的元素(我想这是在一些基类型中定义的,我不记得哪一个),所以检查内容元素的方式是否相同。这就是全部。
此致 Artak
答案 1 :(得分:1)
您可以使用LINQ找出特定类型的控件,可能是这样的:
List<Button> btns = Controls.OfType<Button>().ToList();
答案 2 :(得分:0)
this SO question的答案描述了在可视树中查找控件的许多方法。
谓词版本作为this的链接。