如何在itemscontrol

时间:2016-03-16 08:59:39

标签: wpf canvas itemscontrol

我一直在使用Canvas for ItemsPanel。

<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时, 它抛出异常。

  

无法显式修改用作ItemsControl的ItemsPanel的Panel的Children集合。 ItemsControl为Panel生成子元素。

如何使用带有自定义Itemcontainer的画布使用ItemsPanel?

THX。

1 个答案:

答案 0 :(得分:0)

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

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