0

ウィンドウ内のすべてのビジュアルを取得するためにヘルパーを使用しましたVisualTreeが、一部の特定のコントロールが返されるリストに表示されないことがあります。これは、私が知る限り、それらがまだレンダリングされていないためです。VisualTree列挙は、コントロールが既にレンダリングされている場合にのみ役立ちます。

現在、代わりにウィンドウ内のすべての論理オブジェクトをリストする単純な再帰的メソッドを作成しようとしているので、それらがレンダリングされる前にそれらを操作できます。

だから、これが論理ツリーのためにこのようなものを作成する私の最初の試みです:

public static List<DependencyObject> ListLogical( DependencyObject parent )
{
    var depList = new List<DependencyObject>();
    foreach ( var child in LogicalTreeHelper.GetChildren( parent ).OfType<DependencyObject>() )
    {
        depList.AddRange( ListLogical( child ) );
    }
    return depList;
}
4

1 に答える 1

0

エラーを見つけて修正しました。その提案の作業方法は次のとおりです。

public static List<DependencyObject> ListLogical( DependencyObject parent)
{
    var depList = new List<DependencyObject>
    {
        parent
    };
    foreach ( var child in LogicalTreeHelper.GetChildren( parent ).OfType<DependencyObject>() )
    {
        depList.AddRange( ListLogical( child ) );
    }
    return depList;
}

最初の方法で犯した間違いは、返されるリストに親自体を追加しなかったことです。

于 2013-04-27T13:30:02.120 に答える