我想覆盖 ItemsControl,这样它就不会为每个项目创建一个容器,而是按原样呈现它们。
这可能吗?通过新的派生类型或 xaml?
编辑:为了进一步解释,我想在数据模板中绑定 Canvas 附加属性,而不是在 ItemContainerStyle 中进行绑定,但要使其正常工作,就必须没有容器,.. 这样 Canvas直接看椭圆/矩形。
原因是,我想要绑定的值可能并不总是具有相同的名称,因为在这种情况下,Left 属性对于 A 类型是“Left”,而对于 B 类型是“X”。
我知道我可以使用 ItemContainerStyle 中的优先级绑定来执行此操作,但更愿意在数据模板中设置绑定。
可能吗?
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type local:A}">
<Ellipse Width="25" Height="25" Fill="Red"
Canvas.Left="{Binding Left}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:B}">
<Rectangle Width="25" Height="25" Fill="Green"
Canvas.Left="{Binding X}"/>
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>