我如何更改项目控件中的 ItemContainer

How can i change ItemContainer in itemscontrol

我一直在为 ItemsPanel 使用 Canvas。

<Setter Property="ItemsPanel">
    <Setter.Value>
        <ItemsPanelTemplate>
            <Grid>
                <Canvas/>
            </Grid>
        </ItemsPanelTemplate>
    </Setter.Value>
</Setter>

并通过继承 ItemsControl 覆盖两个方法。

protected override bool IsItemItsOwnContainerOverride(object item)
{
    // ABCItem is example. like ListboxItem.
    return (item is ABCItem);
}


 protected override DependencyObject GetContainerForItemOverride()
 {
     return new ABCItem();
 }

但是当我通过 Canvas 使用 ItemsPanel 时, 它抛出异常。

Cannot explicitly modify Children collection of Panel used as ItemsPanel for ItemsControl. ItemsControl generates child elements for Panel.

如何通过 canvas 将 ItemsPanel 与自定义 Itemcontainer 一起使用?

谢谢。

ItemsControl 使用 ItemsPanelTemplate 中的顶级面板。所以你不应该把 Canvas 放在网格中:

<Setter Property="ItemsPanel">
     <Setter.Value>
        <ItemsPanelTemplate>
            <Canvas/>
         </ItemsPanelTemplate>
    </Setter.Value>
</Setter>