2010-11-21 58 views
3

對於我的WP7應用程序,我需要找到一個日期控件,我已經放置在pivotitem的頭部模板中。 如何在後面的代碼中爲當前選定的PivotItem訪問此日期選擇器控件?WP7在pivotitem頭部找到控件

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)時停止。創建一個輔助功能是這樣的:

​​

然後與PivotItem作爲DependencyObject的,typeof運算(的DatePicker)作爲呼叫類型,並最終轉換返回的DependencyObject到一個datepicker。

HTH

+0

devcube,請參閱我在問題中更新的示例。我使用此代碼來查找日期選擇器,但它總是從第一個pivotitem中獲取datepicker,而當我使用類似下面的方法調用時,它不是所選的PivotItem:RadDatePicker radDatePicker = VisualElementHelper.FindName (「radDatePicker」,this); – 2010-11-21 16:59:42

+0

如果我使用 - RadDatePicker radDatePicker = VisualElementHelper.FindName (「radDatePicker」,CurrentPivotItem);其中CurrentPivotItem設置爲PivotControl的SelectedItem,則返回空引用。 :( – 2010-11-21 17:00:56

1

正常的父/子關係並不適用於Pivot控件。你可以做的是搜索直接在PivotItem的DatePicked組件:

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

MainPivot是透視控制。我通過SelectedItem獲取當前選定的項目 - 注意我直接將它轉換爲PivotItem,否則我會得到一個對象。然後,我正在尋找一個名爲DateControl的控件,因爲您已爲其設置了x:名稱

所有需要做的事情之後,將對象投射到DatePicker並以與其他任何控件相同的方式訪問其屬性。