2012-04-01 11 views
0

Wenn eine WPF Datumsauswahl in einem Raster in einem WPF Fenster platziert wird:LogicalTreeHelper.GetChildren Rückkehr leere Liste

var children = LogicalTreeHelper.GetChildren(datePicker1); 

gibt eine leere Liste, wenn in den Fenstern geladen Handler verwendet. Könnte jemand erklären, warum das passiert?

Folgendes funktioniert, wenn die Visibility-Eigenschaft des Datepickers auf Visibile gesetzt ist. Ich habe ein Szenario, in dem die Datumsauswahl beim Start daher nicht sichtbar ist, bei Verwendung von LogicalTreeHelper suchen statt:

private void DatePickerLoaded(object sender, RoutedEventArgs args) 
     { 
      var tb = GetChildOfType<DatePickerTextBox>(this); 
      if (tb == null) return; 

      var wm = tb.Template.FindName("PART_Watermark", tb) as ContentControl; 
      if (wm == null) return; 

      wm.Content = string.Empty; 

      DisplayDateStart = new DateTime(2010, 1, 1); 
      DisplayDateEnd = new DateTime(2100, 12, 31); 
     } 

     public T GetChildOfType<T>(DependencyObject dependencyObject) where T : DependencyObject 
     { 
      if (dependencyObject == null) return null; 

      for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++) 
      { 
       var child = VisualTreeHelper.GetChild(dependencyObject, i); 

       var result = (child as T) ?? GetChildOfType<T>(child); 
       if (result != null) return result; 
      } 

      return null; 
     } 
+0

Welche Kinder erwarten Sie vom DatePicker? Es ist kein Container und hat daher keine Kinder. – Clemens

+0

@Clemens danke, gute Frage, was bedeutet ein Kind im Zusammenhang mit GetChildren? Bitte beachten Sie die aktualisierte Frage, die auf Kinder hinweist. – sturdytree

+0

Sie verwechseln visuelle und logische Kinder hier oder den [visuellen Baum und den logischen Baum] (http://msdn.microsoft.com/en-us/library/ms753391.aspx). – Clemens

Antwort

1

Datepicker nicht logical children hat.

Die visuellen untergeordneten Elemente eines DatePicker sind intern und nicht Teil eines logischen Baums. DatePicker ist kein ContentControl und seine Interna sind nicht Teil der Objektgraphik Ihrer Anwendung wie erwähnt here.

Verwandte Themen