Это основано на чьем-то другом источнике, который я не могу вспомнить, но мы используем его, чтобы помочь найти визуальных потомков типа. Возможно, это не самое эффективное использование для этого сценария, но это может помочь вам выбрать правильный путь.
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;
}
[Изменить 4.16.09]
Исходя из этого, попробуйте этот метод. Должен найти все флажки и изменить состояние в соответствии с предоставлением, вызываемым из вашего обработчика событий для событий Checked / Unchecked.
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);
}
}