0

在 XAML 中,我创建了CustomWindow. 它包含许多嵌套元素。是否存在获取所有命名元素(我通过 设置名称x:Name="SomeName")、标记为公共(我通过 设置修饰符x:FieldModifier="public")的简单方法?

4

1 回答 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 回答