我如何更改项目控件中的 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>
我一直在为 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>