如果我有一个派生自ItemsControl
的组件,我可以访问它的子集合,以便我可以遍历它们来执行某些操作吗?我现在似乎找不到任何简单的方法。
答案 0 :(得分:49)
类似于Seb的解决方案,但可能具有更好的性能:
for(int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
答案 1 :(得分:21)
看看这是否有助于你:
foreach(var item in itemsControl.Items)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}
控件中的逻辑项与UIElement
之间存在差异。
答案 2 :(得分:12)
要识别ItemsControl
的数据绑定子控件(如ToggleButton
),您可以使用:
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
}
}
答案 3 :(得分:0)
我假设ItemsControl.Items[index]
不起作用,那么?
我不是很有趣,我没有自己检查 - 这只是我的第一次猜测。通常,控件将具有项索引器属性,即使它是数据绑定。