gpt4 book ai didi

c# - 从 DataTemplate 绑定(bind) ZIndex

转载 作者:行者123 更新时间:2023-11-30 13:39:37 24 4
gpt4 key购买 nike

我有一个基本上是这样设置的 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 绑定(bind)到单个项目的 Z 属性。当我调试代码时,我还可以看到,Z 属性 getter 在我期望的时候被访问(例如,每当我为它引发 propertychanged 事件时),所以我假设绑定(bind)可以正常工作。

但是,ZIndex 没有按预期工作。绑定(bind)到值对实际显示的 Z 顺序没有影响。这段代码哪里出错了?

最佳答案

DataTemplate 的内容被包裹在 ContentPresenter 中,因此 DataTemplate 中的 Canvas 不是ItemsPanel Grid 的直接子项。这就是 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>

关于c# - 从 DataTemplate 绑定(bind) ZIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11263946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com