2012-04-01 2 views
0

Если МОФ DatePicker помещают в сетку в окне МОФ:LogicalTreeHelper.GetChildren возвращающиеся пустой список

var children = LogicalTreeHelper.GetChildren(datePicker1); 

возвращает пустой список, когда используется в окнах нагруженных обработчик. Пожалуйста, может кто-нибудь объяснить, почему это происходит?

Следующее работает, когда свойство видимости datepicker установлено в visibile. У меня есть сценарий, где DatePicker не видно при запуске, поэтому глядя на использование LogicalTreeHelper вместо:

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

Какие дети вы ожидаете от DatePicker? Это не контейнер и, следовательно, не имеет детей. – Clemens

+0

@Clemens спасибо, хороший вопрос, что означает ребенок в контексте GetChildren? см. обновленный вопрос, который указывает, что есть дети. – sturdytree

+0

Здесь вы вводите в заблуждение визуальных и логических детей или [визуальное дерево и логическое дерево] (http://msdn.microsoft.com/en-us/library/ms753391.aspx). – Clemens

ответ

1

DatePicker не logical children.

Визуальные дети DatePicker являются внутренними и не являются частью логического дерева. DatePicker не является ContentControl, и его внутренние элементы не являются частью графического объекта вашего приложения, как указано here.

Смежные вопросы