从DataTemplate绑定ZIndex

我有一个基本上这样设置的视图:

<Grid>
<ViewBox>
    <Grid>
        <ItemsControl ItemsSource="{Binding MyItems}"
                      ItemTemplate="{Binding Source={StaticResource MyItemsDataTemplate}}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Grid />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Grid>
</ViewBox>
</Grid>

这里使用的DataTemplate可以简化为:

<DataTemplate x:Key="AreaItemDisplayDataTemplate">
<Canvas Grid.ZIndex={Binding Z}>
    <Grid>
        // an shape is displayed here...
    </Grid>
</Canvas>

我现在预计ZIndex被绑定到单个项目的Z属性。 当我调试代码时,我也可以看到,当我期望它(只要我为它提升propertychanged事件,例如),Z属性getter被访问,所以我假设绑定正常工作。

但是,ZIndex没有按预期工作。 对值的绑定对实际显示的Z顺序没有影响。 我在哪里错了这个代码?


DataTemplate的内容被包装在ContentPresenter因此DataTemplateCanvas不是ItemsPanel Grid的直接子ItemsPanel 。 这就是ZIndex属性没有做任何事情的原因。

ZIndex Binding移动到ItemContainerStyle ,它应该可以工作。

<ItemsControl ItemsSource="{Binding MyItems}" 
              ItemTemplate="{Binding Source={StaticResource MyItemsDataTemplate}}"> 
    <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
            <Grid /> 
        </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Grid.ZIndex" Value="{Binding Z}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl> 
链接地址: http://www.djcxy.com/p/44639.html

上一篇: Binding ZIndex from DataTemplate

下一篇: WPF DataTemplate method binding with parameter