LogicalTreeHelper.GetChildren返回空列表

时间:2012-04-01 21:26:22

标签: wpf

如果wpf datepicker放在wpf窗口的网格中:

var children = LogicalTreeHelper.GetChildren(datePicker1);

在Windows加载处理程序中使用时返回一个空列表。有人可以解释为什么会这样吗?

当datepicker的visibility属性设置为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;
        }

1 个答案:

答案 0 :(得分:1)

DatePicker没有logical children

DatePicker的可视子项是内部的,不是逻辑树的一部分。 DatePicker不是ContentControl,其内部不是应用程序的对象图的一部分,如上所述here