如果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;
}
答案 0 :(得分:1)
DatePicker没有logical children。
DatePicker的可视子项是内部的,不是逻辑树的一部分。 DatePicker不是ContentControl,其内部不是应用程序的对象图的一部分,如上所述here。