gpt4 book ai didi

c# - 在 Canvas 上为矩形设置 zindex 不会将其置于最前面

转载 作者:行者123 更新时间:2023-11-30 22:21:16 26 4
gpt4 key购买 nike

我在 Canvas 和上面绘制的矩形方面遇到了问题。他们以相反的创建顺序获取事件(最新的在最上面),而不是 zindex 的顺序......

我已将 ItemsControl 与资源列表绑定(bind)。

然后有一个 Canvas 作为项目面板:

<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas x:Name="BitmapCanvas"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

所有资源都绑定(bind)为矩形:

<ItemsControl.ItemTemplate>
<DataTemplate DataType="interfaces:IResourceView">
<Rectangle ...>

还有一种风格:

<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
<Setter Property="Canvas.ZIndex" Value="0"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
<Setter Property="Canvas.ZIndex" Value="15"/>
</DataTrigger>
</Style.Triggers>
</Style>
...</Rectangle.Style></Rectangle></DataTemplate></ItemsControl.ItemTemplate>

如您所见,当矩形被选中时,我将其 Zindex 设置为 0,然后其他矩形的 zindex 值更大。我也在用交换值尝试它,但仍然矩形以同样的方式获得关注。有没有人知道为什么会这样?

最佳答案

在 DataTemplate 中的 Rectangle 上设置 Canvas.ZIndex(在 WPF 中实际上是 Panel.ZIndex)无效,因为这些 Rectangle 不是 ItemsPanelTemplate 中 Canvas 的直接子级。换句话说,矩形没有 sibling ,但是 ZIndex 是一个相对值,它只影响同一容器控件的 sibling 。

实际上每个矩形都放入 ContentPresenter 的内容(这是 ItemsControl 的项目容器类型)。然后将这些 ContentPresenters 放入 Canvas。

为了让事情正常进行,您可以将 DataTriggers 移动到 ItemContainerStyle :

<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
<Setter Property="Panel.ZIndex" Value="0"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
<Setter Property="Panel.ZIndex" Value="15"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>

关于c# - 在 Canvas 上为矩形设置 zindex 不会将其置于最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14489035/

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