在带有Canvas ItemsPanel的ListBox的上下文中,我需要为多个DataTemplates中的每个控件访问Cavas.ZIndex(该列表显示多个对象类型)。它还不足以使用
<ListBox.ItemContainerStyle>
<Setter Property="Canvas.ZIndex" ..... />
因为有几个数据模板,每个模板有几个控件,我想控制每个控件的绝对zindex。 这甚至可能吗?
答案 0 :(得分:1)
据我所知,这是不可能的
原因是当ListBox呈现时,它会像这样呈现(假设您指的是your other question中的相同代码):
<Canvas>
<ListBoxItem>
<ContentPresenter>
<Grid>
<TextBlock />
<Line />
</Grid>
</ContentPresenter>
</ListBoxItem>
<ListBoxItem>
<ContentPresenter>
<Grid>
<TextBlock />
<Line />
</Grid>
</ContentPresenter>
</ListBoxItem>
<ListBoxItem>
<ContentPresenter>
<Grid>
<TextBlock />
<Line />
</Grid>
</ContentPresenter>
</ListBoxItem>
...
</Canvas>
如您所见,每个ListBoxItem都呈现为一组嵌套控件。您不能在所有行上绘制所有TextBlock,因为它们并不都共享同一个父级,ZIndex用于对同一父级容器中的项目进行排序。
解决方法是使用两个单独的ItemsControls彼此叠加。所以你的所有Line都会被绘制在Bottom ItemsControl上,而所有的TextBlocks都会被放在Top ItemsControl上。
<Grid>
<ItemsControl ItemsSource="{Binding MyData}"
ItemTemplate="{DynamicResource MyLineTemplate}" />
<ItemsControl ItemsSource="{Binding MyData}"
ItemTemplate="{DynamicResource MyTextBlockTemplate}" />
</Grid>