我有以下 ItemsControl,我使用 Canvas 作为面板:
<ItemsControl ItemsSource="{Binding Widgets}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type widgetLayoutSpike:ColouredWidget}">
<Grid Background="{Binding BgColour}">
<TextBlock Text="{Binding Title}" />
</Grid>
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid Background="Yellow">
<!-- <ContentPresenter /> -->
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
我的要求是:
- ItemTemplates 是通过类型化的 DataTemplates 设置的(上面显示了 ColouredWidget 项目类型的示例)。对于不同的项目类型,可能有几个。
- 我需要能够指定一个 ItemContainer 模板,它包含所有不同的 ItemTemplates。具体用例是我希望这个 ItemContainer 为所有项目(带有按钮等)设置一个公共边框镶边。
Canvas 为每个绑定项目创建一个 ContentPresenter。正如您在上面看到的,我曾希望能够为 ItemContainerStyle 中的 ContentPresenter 指定一个 ContentTemplate,但这不起作用,因为我假设它本质上创建了一个循环引用。
提前致谢!