C# 如何访问ItemsControl的子级?
如果我有一个从C# 如何访问ItemsControl的子级?,c#,wpf,itemscontrol,C#,Wpf,Itemscontrol,如果我有一个从ItemsControl派生的组件,我是否可以访问它的子组件集合,以便通过它们循环执行某些操作?目前我似乎找不到任何简单的方法。我假设ItemsControl.Items[index]不起作用,那么 我一点也不好笑,我也没有检查过自己——这只是我的第一个猜测。大多数情况下,控件将具有items indexer属性,即使它是数据绑定的。查看这是否有助于您: foreach(var item in itemsControl.Items) { UIElement uiElemen
ItemsControl
派生的组件,我是否可以访问它的子组件集合,以便通过它们循环执行某些操作?目前我似乎找不到任何简单的方法。我假设ItemsControl.Items[index]
不起作用,那么
我一点也不好笑,我也没有检查过自己——这只是我的第一个猜测。大多数情况下,控件将具有items indexer属性,即使它是数据绑定的。查看这是否有助于您:
foreach(var item in itemsControl.Items)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}
控件中的逻辑项与ui元素
解决方案之间存在差异,后者类似于但可能具有更好的性能:
for(int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
for(int i=0;i
要识别项控件
的数据绑定子控件(如切换按钮
),可以使用以下方法:
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
}
}
for(int i=0;i
这不会检索“子”元素(控件),只检索列表中不一定是控件的项。不,如果您使用数据源和数据模板,例如在数据模板中使用的字符串负载,则会将字符串作为项返回。这很公平。我将保留我的答案,因为您的评论可能有用。您需要调用c.ApplyTemplate()在调用FindName()
之前,code>将返回null。我认为这应该是可以接受的答案。无论如何,必须检查c变量,因为它可以为null,例如,如果控件不可见。如果控件尚未呈现/显示,则它似乎没有任何项。