0

VisualTree のフレームワーク要素を述語で見つけるにはどうすればよいですか? そんな感じ :

public static FrameworkElement FindChild(FrameworkElement root, Predicate<> predicate)
{
   ...
}

私はそれを次のように使用します:

Button btn = FindChild(MainForm, element => element is Button);

事前に助けてくれてありがとう!

4

3 に答える 3

1

したがって、本当の問題は、指定された「ルート」要素のすべての子をどのように反復するかです。そうすれば、その要素の述語を呼び出して、必要なものを選択できるようになるからです。したがって、ここでは2つの異なるワークフローを区別する必要があると思います。1つは、要素がPanelの場合、最初にそれを渡し、次にそのChildrenプロパティを繰り返し処理して、それらすべてを渡す必要があります(再帰と非再帰の両方が機能しますが、ツリーの奥深くに行き、どちらの場合もレベルを超えて戻る必要があります)。パネル要素以外の場合は、その要素を述語に渡すだけです。また、「Content」プロパティを持つ要素について考える必要があります(これはいくつかの基本タイプで定義されていると思いますが、どれがどれであるかは覚えていません)。したがって、同じ方法でcontent要素を確認してください。そしてそれがすべてです。

よろしく、Artak

于 2012-07-24T09:40:56.397 に答える
1

次のように、LINQ を使用して特定のタイプのコントロールを見つけることができます。

List<Button> btns = Controls.OfType<Button>().ToList();
于 2012-07-24T09:50:45.727 に答える
0

この SO の質問への回答では、ビジュアル ツリーでコントロールを探す多くの方法について説明しています。

述語のバージョンは、thisへのリンクとして提供されています。

于 2012-07-24T09:36:08.187 に答える