从自定义控件/ c# WPF中获取项

本文关键字:获取 WPF 自定义控件 | 更新日期: 2023-09-27 18:10:56

我有两个类:

class MultiSwitch : ListBox
{
    protected override bool IsItemItsOwnContainerOverride(object item)
    {
        return item is MultiSwitchItem;
    }
    protected override DependencyObject GetContainerForItemOverride( )
    {
        return new MultiSwitchItem( );
    }
}
class MultiSwitchItem : ListBoxItem {...}

基本上,我想根据物品数量来放置物品。所以我订阅了收集更改的事件,我试图从项目收集接收MultiSwitchItem。我发现Items集合不包含MultiSwitchItems。然后我找到了这样的解决方案:

    private void RearrangeItems(
        object sender,
        NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
    {
        foreach (var item in Items)
        {
            MultiSwitchItem item2 = ItemContainerGenerator.ContainerFromItem(item) as MultiSwitchItem;
            ...
        }
    }

但是item2总是null。我做错了什么?

编辑好的,我在这方面有了一点进展。这个问题只在控件初始化时出现(所以我认为,项目的包装器不是立即创建的)。所以现在的问题是:如何强制创建MultiSwitchItem s,或者如何在包装器创建后迭代项目?

从自定义控件/ c# WPF中获取项

而不是

ItemContainerGenerator.ContainerFromItem(item as TextBlock)

这样做

ItemContainerGenerator.ContainerFromItem(item)

item不是TextBlock,它将是底层数据项