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