2010-11-21 3 views
3

私のWP7アプリケーションでは、ピボットアイテムのヘッダテンプレートに配置した日付コントロールを見つける必要があります。 現在選択されているPivotItemのコードビハインドでこのdatepickerコントロールにアクセスするにはどうすればよいですか?WP7はピボットアイテムのヘッダの中にコントロールを見つける

public static T FindName<T>(string name, DependencyObject reference) where T : FrameworkElement 
{ 
    if (string.IsNullOrEmpty(name)) 
    { 
     throw new ArgumentNullException("name"); 
    } 

    if (reference == null) 
    { 
     throw new ArgumentNullException("reference"); 
    } 

    return FindNameInternal<T>(name, reference); 
} 

private static T FindNameInternal<T>(string name, DependencyObject reference) where T : FrameworkElement 
{ 
    foreach (DependencyObject obj in GetChildren(reference)) 
    { 
     T elem = obj as T; 

     if (elem != null && elem.Name == name) 
     { 
      return elem; 
     } 

     elem = FindNameInternal<T>(name, obj); 

     if (elem != null) 
     { 
      return elem; 
     } 
     else 
     { 
      //if (obj.GetType().FullName == "System.Windows.Controls.DataField") 
      // elem = (obj as DataField).Content as T; 

      if (elem != null && elem.Name == name) 
       return elem; 
     } 
    } 
    return null; 
} 

private static IEnumerable<DependencyObject> GetChildren(DependencyObject reference) 
{ 
    int childCount = VisualTreeHelper.GetChildrenCount(reference); 

    if (childCount > 0) 
    { 
     for (int i = 0; i < childCount; i++) 
     { 
      yield return VisualTreeHelper.GetChild(reference, i); 
     } 
    } 
} 

答えて

1

私はこれに対する本当の良い解決策を知らない。私は最初の考えは、なぜあなたはDatePickerオブジェクトへの参照が必要なのだろうと思いますか?しかし、私はあなたの理由があると思います。

考えられる解決方法:
VisualTreeHelperを使用してピボットアイテムからビジュアルツリーをトラバースし、正しいタイプ(DatePicker)のオブジェクトを見つけたら停止することができます。このようにヘルパー関数を作成します。

​​

次にタイプとしてのDependencyObject、typeof演算(日付ピッカー)としてPivotItemでそれを呼び出し、最後に日付ピッカーに戻ったDependencyObjectをキャスト。

HTH

+0

devcube、質問の更新サンプルをご覧ください。私はこのコードを使って日付ピッカーを探していますが、これは次のようなものを使って呼び出すと、常にピボットアイテムからピボットアイテムを取得します。 –

+0

私が使用している場合 - RadDatePicker radDatePicker = VisualElementHelper.FindName ( "radDatePicker"、CurrentPivotItem); CurrentPivotItemがPivotControlのSelectedItemに設定されている場合、null参照が返されます。 :( –

1

通常の親/子関係が本当にピボット制御のために動作しません。あなたにできることはPivotItemに直接DatePickedコンポーネントの検索です:

((DatePicker)((PivotItem)MainPivot.SelectedItem).FindName("DateControl")) 

MainPivotはピボットコントロールです。 SelectedItemを介して現在選択されているアイテムを取得しています。PivotItemに直接キャストしていることに注意してください。そうでないとオブジェクトが得られます。次に、x:名前が設定されていると仮定して、DateControlという名前のコントロールを探しています。

それ以降に行う必要があるのは、オブジェクトをDatePickerにキャストし、他のコントロールと同じ方法でそのプロパティにアクセスします。

関連する問題