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;
}
Welche Kinder erwarten Sie vom DatePicker? Es ist kein Container und hat daher keine Kinder. – Clemens
@Clemens danke, gute Frage, was bedeutet ein Kind im Zusammenhang mit GetChildren? Bitte beachten Sie die aktualisierte Frage, die auf Kinder hinweist. – sturdytree
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