Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何访问ItemsControl的子级?_C#_Wpf_Itemscontrol - Fatal编程技术网

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,例如,如果控件不可见。如果控件尚未呈现/显示,则它似乎没有任何项。