从DataTemplate绑定ZIndex

时间:2012-06-29 14:46:56

标签: c# wpf xaml binding datatemplate

我的View基本上是这样设置的:

<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属性。当我调试代码时,我也可以看到,当我期望它时,访问Z属性getter(每当我为它举起propertychanged事件时),所以我假设绑定工作正常。

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

1 个答案:

答案 0 :(得分:10)

DataTemplate的内容包含在ContentPresenter中,因此Canvas中的DataTemplate不是ItemsPanel {{的直接子项1}}。这就是Grid属性不执行任何操作的原因。

ZIndex ZIndex移至Binding,它应该有效。

ItemContainerStyle