Pregunta

Si tengo un componente derivado de ItemsControl , ¿puedo acceder a una colección de sus hijos para que pueda recorrerlos para realizar ciertas acciones? Parece que no puedo encontrar ninguna manera fácil en este momento.

¿Fue útil?

Solución

Una solución similar a la de Seb, pero probablemente con mejor rendimiento:

for(int i = 0; i < itemsControl.Items.Count; i++)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}

Otros consejos

Mira si esto te ayuda:

foreach(var item in itemsControl.Items)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}

Hay una diferencia entre los elementos lógicos en un control y un UIElement .

Para identificar los controles secundarios enlazados a datos de ItemsControl (como un ToggleButton ), puede usar esto:

for (int i = 0; i < yourItemsControl.Items.Count; i++)
{

    ContentPresenter c = (ContentPresenter)yourItemsControl.ItemContainerGenerator.ContainerFromItem(yourItemsControl.Items[i]);
    ToggleButton tb = c.ContentTemplate.FindName("btnYourButtonName", c) as ToggleButton;

    if (tb.IsChecked.Value)
    {
        //do stuff

    }
}

Supongo que ItemsControl.Items [index] no funciona, entonces?

No estoy siendo gracioso, y no lo he comprobado por mí mismo, es solo mi primera suposición. En la mayoría de los casos, un control tendrá una propiedad de indexador de elementos, incluso si está en un archivo de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top