2016-08-29 5 views
0

私はいくつかの子コントロールからなるユーザーコントロールを持っていますMyUserControlを呼び出すことができます。Windowsの子コントロールのUserControlを取得

他のコントロールの中には、子としてtextboxが含まれています。私は子供textboxを持っている場合は、どのように私はtextboxが常駐することをちょうどGrid親としてMyUserControlを取得しないでください。

私が見つかりましたが、それは動作しません静的メソッドがあります。

public static T GetParentOfType<T>(this Control control) 
{ 
    const int loopLimit = 100; // could have outside method 
    var current = control; 
    var i = 0; 

do 
{ 
    current = current.Parent; 

    if (current == null) throw new Exception("Could not find parent of specified type"); 
    if (i++ > loopLimit) throw new Exception("Exceeded loop limit"); 

} while (current.GetType() != typeof(T)); 

return (T)Convert.ChangeType(current, typeof(T)); 

}

ラインcurrent = current.Parent;DependencyObject

+0

制御する型をキャストしようとしましたか?たとえば、 'current = current.Parent as Control;'または 'current =(Control)current.Parent;'のようになります。コントロールに渡されたコントロールの親がControlに型キャストされると仮定します。 –

+0

'FrameworkElement current = control;'と 'current = current.Parent as FrameworkElement;'のようにキャストしようとしました。 – PutraKg

答えて

1

私はちょうどFrameworkElementとしてキャストし、それが動作Controlに変換することはできませんと言います。

public static T GetParentOfType<T>(this FrameworkElement control) 
    { 
     const int loopLimit = 3; // could have outside method 
     FrameworkElement current = control; 
     var i = 0; 

     do 
     { 
      current = current.Parent as FrameworkElement; 

      if (current == null) throw new Exception("Could not find parent of specified type"); 
      if (i++ > loopLimit) throw new Exception("Exceeded loop limit"); 

     } while (current.GetType() != typeof(T)); 

     return (T)Convert.ChangeType(current, typeof(T)); 
    } 
関連する問題