2011-08-10 6 views
1

他のwpf usercontrol要素を含むwpf usercontrolを見るメソッドを作成しようとしています。たとえば、usercontrolの1つに、xamlを使用して追加された列を持つデータグリッドが含まれています。私は、DataGridの名前付き列を操作できるようにしたい。リフレクションを使用しようとしていて、内部コントロールを取得する方法が見つかりません。私はさまざまなgetメソッド(GetProeprties、GetMembers、GetFields)を試しましたが、内部usercontrolのコレクションを見つけることができません。任意のアイデアをいただければ幸いです。反射を使用してコンポジットwpfコントロールのコントロールを探します

答えて

3

FindNameを試しましたか?

var col = uc.FindName("MyColumn") as DataGridColumn; 

編集:これは、単純な例ではなく、それがない場合も、ネストされたユーザーコントロールのために動作します。あなたは再帰的にそれを採用することができ、このことの場合は、ここでいくつかの大ざっぱな実装です:

public static object FindNamedObject(FrameworkElement container, string name) 
{ 
    var target = container.FindName(name); 
    if (target == null) 
    { 
     int count = VisualTreeHelper.GetChildrenCount(container); 
     for (int i = 0; i < count; i++) 
     { 
      var child = VisualTreeHelper.GetChild(container, i) as FrameworkElement; 
      if (child != null) 
      { 
       target = FindNamedObject(child, name); 
       if (target != null) 
       { 
        break; 
       } 
      } 
     } 
    } 
    return target; 
} 
+0

パーフェクト、...バックステップを取るためにリフレクションを使用して忙しいのおかげ – Chris

+0

@クリスへ:助けうれしいことに、私はちょうど追加された追加のノート私はこのような単純な呼び出しがあなたのケースで失敗すると予想したので、より複雑に聞こえました。 –

関連する問題