0

XAMLで作成しましCustomWindowた。多くのネストされた要素が含まれています。x:Name="SomeName"public(修飾子を設定)としてマークされた、すべての名前付き要素(名前を設定)を取得するための単純なメソッドが存在しx:FieldModifier="public"ますか?

4

1 に答える 1

1

私が知っているすぐに使える方法はありません。を使用して VisualTree を参照し、関心VisualTreeHelperのあるプロパティがあるかどうかを確認する必要があります。

必要なことを実行できるメソッドは次のとおりです。

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 に答える