Если МОФ 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;
}
Какие дети вы ожидаете от DatePicker? Это не контейнер и, следовательно, не имеет детей. – Clemens
@Clemens спасибо, хороший вопрос, что означает ребенок в контексте GetChildren? см. обновленный вопрос, который указывает, что есть дети. – sturdytree
Здесь вы вводите в заблуждение визуальных и логических детей или [визуальное дерево и логическое дерево] (http://msdn.microsoft.com/en-us/library/ms753391.aspx). – Clemens