Pergunta

Se eu tenho um componente derivado de ItemsControl, posso acessar uma coleção de TI de crianças para que eu pode fazer um loop através deles para executar determinadas ações? Eu não consigo encontrar alguma maneira fácil no momento.

Foi útil?

Solução

Uma solução semelhante ao Seb de mas provavelmente com melhor desempenho:

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

Outras dicas

Veja se isso ajuda-lo:

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

Há uma diferença entre os itens lógicos em um controle e um UIElement.

Para identificar controles databound criança de ItemsControl (como um ToggleButton), você pode usar isto:

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

    }
}

Estou assumindo ItemsControl.Items[index] não funcionar, então?

Eu não estou sendo engraçado, e eu não tenho verificado para mim - que é apenas meu primeiro palpite. Na maioria das vezes um controle terá um itens de indexador propriedade, mesmo que de ligação de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top