我在wpf中有以下XAML
<Canvas>
<ItemsControl ItemsSource="{Binding CompositeCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type Type1}">
<Shape1/>
</DataTemplate>
<DataTemplate DataType="{x:Type type2}">
<Shape2/>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
</Canvas>
因此,本质上,我的System.Windows.Data.CompositeCollection
可能包含两种不同类型的数据模板。然后根据类型绘制Shape1或Shape2。
我需要shape1的zindex高于shape2,所以我需要从dataTemplate设置zindex。
我该怎么做?
答案 0 :(得分:1)
ItemTemplate中的元素不会成为ItemsPanelTemplate中Canvas的直接子元素。因此设置类似
<DataTemplate DataType="{x:Type Type1}">
<Shape1 Panel.ZIndex="1"/>
</DataTemplate>
无效。
您必须声明一个ItemContainerStyle:
<ItemsControl ...>
...
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Panel.ZIndex" Value="{Binding ViewModelItemZIndex}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>