我如何访问ItemsControl的子程序?

问题描述 投票:29回答:4

如果我有一个从 ItemsControl我是否可以访问它的子集,以便我可以通过它们来循环执行某些操作? 目前我似乎找不到任何简单的方法。

c# wpf itemscontrol
4个回答
57
投票

一个类似于 Seb's 但可能有更好的性能 。

for(int i = 0; i < itemsControl.Items.Count; i++)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}

22
投票

看看这是否对你有帮助。

foreach(var item in itemsControl.Items)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}

控件中的逻辑项和逻辑项之间是有区别的。UIElement.


18
投票

识别 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

    }
}

-1
投票

我假设 ItemsControl.Items[index] 不工作,那么?

我不是在开玩笑,我也没有亲自检查过--这只是我的第一个猜测。 大多数情况下,一个控件会有一个 items indexer 属性,即使它是 databound。

© www.soinside.com 2019 - 2024. All rights reserved.