在 XAML 中,我创建了CustomWindow
. 它包含许多嵌套元素。是否存在获取所有命名元素(我通过 设置名称x:Name="SomeName"
)、标记为公共(我通过 设置修饰符x:FieldModifier="public"
)的简单方法?
问问题
861 次
1 回答
1
我知道没有开箱即用的方式。您必须使用 浏览 VisualTreeVisualTreeHelper
并检查它们是否具有您感兴趣的属性。
这是一种可以满足您需要的方法:
public static IEnumerable<FrameworkElement> FindVisualChildren(FrameworkElement obj, Func<FrameworkElement, bool> predicate)
{
if (obj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
var objChild = VisualTreeHelper.GetChild(obj, i);
if (objChild != null && predicate(objChild as FrameworkElement))
{
yield return objChild as FrameworkElement;
}
foreach (FrameworkElement childOfChild in FindVisualChildren(objChild as FrameworkElement, predicate))
{
yield return childOfChild;
}
}
}
}
用法可能类似于仅检查名称:
var children = FindVisualChildren((FrameworkElement)sender, o => !string.IsNullOrEmpty(o.Name));
于 2012-12-05T09:52:19.140 回答