Dies basiert auf der Quelle von jemand anderem, die ich nicht erinnern kann, aber wir verwenden es, um visuelle Kinder eines Typs zu finden. Es ist möglicherweise nicht die effizienteste Verwendung für dieses Szenario, aber es könnte helfen, Sie auf dem richtigen Weg zu bekommen.
public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
return (childItem)child;
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
return null;
}
[Edit 4.16.09] auf dieser Grundlage, versuchen Sie diese Methode aus. Sollte alle CheckBoxes finden und den Status ändern, der von Ihrem Event-Handler bei den Checked/Unchecked-Ereignissen aufgerufen werden kann.
public static void CheckAllBoxes(DependencyObject obj, bool isChecked)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
// If a checkbox, change IsChecked and continue.
if (obj is CheckBox)
{
((CheckBox) obj).IsChecked = isChecked;
continue;
}
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
CheckAllBoxes(child, isChecked);
}
}
Wenn Sie nicht das Absenderobjekt oder die routedeventargs in HeadCheck verwenden, sollten Sie sie nicht in – UrbanEsc
übergeben Die 'UpdateSourceTrigger = PropertyChanged 'hilft mir. Vielen Dank. – AechoLiu