If i have a component derived from ItemsControl
, can I access a collection of it's children so that I can loop through them to perform certain actions? I can't seem to find any easy way at the moment.
How do I access the children of an ItemsControl?
Asked Answered
A solution similar to Seb's but probably with better performance :
for(int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
it seems if the control hasn't rendered/been shown yet, it won't have any items. –
Cheer
See if this helps you out:
foreach(var item in itemsControl.Items)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}
There is a difference between logical items in a control and an UIElement
.
To identify ItemsControl
's databound child controls (like a ToggleButton
), you can use this:
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
}
}
You need to call
c.ApplyTemplate();
before calling FindName()
or else it returns null. –
Lelea This should be the accepted answer in my opinion. Anyway the c variable must be checked because it can be null, for example if the control is not visible. –
Incorporation
© 2022 - 2024 — McMap. All rights reserved.