我遇到了画布和矩形画的问题。 他们正在以相反的创造顺序获得事件(最新的是在顶部),而不是zindex的顺序......
我已经将ItemsControl与资源列表绑定在一起。
然后有一个画布作为项目面板:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas x:Name="BitmapCanvas"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
所有资源都绑定为矩形:
<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值设置为更大。我也尝试使用交换值,但仍然 矩形以同样的方式获得焦点。 有人知道为什么会这样吗?
答案 0 :(得分:3)
在DataTemplate中的Rectangle上设置Canvas.ZIndex
(或WPF中的实际Panel.ZIndex)无效,因为这些Rectangle不是ItemsPanelTemplate中Canvas的直接子项。换句话说,矩形不是兄弟,但ZIndex
是一个相对值,它只影响同一容器控件的兄弟。
实际上每个矩形都放在ContentPresenter的内容中(这是ItemsControl的项容器类型)。然后将这些ContentPresenter放入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>
答案 1 :(得分:0)
您的问题与您的触发器有关。 Style仅支持EventTrigger,而不支持任何其他类型,因此永远不会执行触发器。你在DataTemplate中,并且那些支持DataTrigger,所以你可以移动一些东西来解决问题:
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle x:Name="Rect"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
<Setter TargetName="Rect" Property="Canvas.ZIndex" Value="0"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
<Setter TargetName="Rect" Property="Canvas.ZIndex" Value="15"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>