Esto se basa en la fuente de otra persona que no puedo recordar, pero lo usamos para ayudar a encontrar niños visuales de un tipo. Puede que no sea el uso más eficiente para este escenario, pero podría ayudarlo a ponerse en el camino correcto.
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;
}
[Editar 04/16/09] Basado en eso, probar este método. Debe encontrar todas las casillas de verificación y cambiar el estado como se proporciona, que se puede llamar desde su controlador de eventos en los eventos marcados/no marcados.
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);
}
}
si no va a utilizar el objeto emisor o la ruta de desactivación en HeadCheck no debería estar pasándolos en – UrbanEsc
El 'UpdateSourceTrigger = PropertyChanged' me ayuda. Gracias. – AechoLiu