从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
因此DataTemplate
的Canvas
不是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