Questo è basato sulla fonte di qualcun altro che non riesco a ricordare, ma lo usiamo per aiutare a trovare bambini visivi di un tipo. Potrebbe non essere l'uso più efficiente per questo scenario, ma potrebbe aiutarti a portarti sulla strada giusta.
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;
}
[Modifica 4.16.09] Sulla base di ciò, provare questo metodo. Dovrebbe trovare tutti i CheckBox e modificare lo stato come previsto, richiamabile dal gestore eventi sugli eventi selezionati/non selezionati.
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);
}
}
fonte
2009-04-16 14:07:27
se non si intende utilizzare l'oggetto mittente o il routedeventargs in HeadCheck, non è necessario passarli in – UrbanEsc
"UpdateSourceTrigger = PropertyChanged" mi aiuta. Grazie. – AechoLiu