WPF:在Window中获取所有命名元素

时间:2012-12-05 09:48:00

标签: c# wpf xaml window

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

1 个答案:

答案 0 :(得分:1)

我没有开箱即用的方式。您必须使用VisualTreeHelper浏览VisualTree,并检查它们是否具有您感兴趣的属性。

这是一种可以满足您需求的方法:

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));