从DataTemplate设置ItemsControl中的项目的ZIndex

时间:2018-07-12 13:28:43

标签: c# wpf z-index

我在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。

我该怎么做?

1 个答案:

答案 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>