Como faço para acessar os filhos de um ItemsControl?
-
05-07-2019 - |
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.
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.