如果我有一个派生自ItemsControl
的组件,我可以访问它的子项集合,以便我可以循环遍历执行某些操作吗?目前似乎找不到任何简单的方法。
如果我有一个派生自ItemsControl
的组件,我可以访问它的子项集合,以便我可以循环遍历执行某些操作吗?目前似乎找不到任何简单的方法。
一个类似于Seb的解决方案,但可能具有更好的性能:
for(int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
看看这是否能帮助您:
foreach(var item in itemsControl.Items)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}
在控件中,逻辑项和 UIElement
有所不同。
要识别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
}
}
FindName()
之前你需要调用c.ApplyTemplate();
,否则它会返回null。 - Karmacon