我有一个包含许多矩形的画布,如下所示:
<Canvas x:Name="canvas">
<ItemsControl ItemsSource="{Binding Rectangles}" Canvas.ZIndex="5" Name="RectanglesControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Panel.ZIndex" Value="1" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type Rectangle}">
<Button Command="{Binding Command}"
IsEnabled="{Binding IsEnabled}">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Path Data="{Binding Geometry}"
Fill="{Binding FillBrush}"
IsHitTestVisible="True"
Cursor="Hand"
Opacity="{Binding IsFillVisible, Converter={StaticResource BoolToDoubleConverter}}"/>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
</Canvas>
为每个矩形创建一个按钮,并使用“按钮模板”将按钮“伪装”为矩形。这是为了使矩形可单击。
现在的问题是某些按钮已启用,而某些按钮未启用。因此,如果未启用的按钮位于已启用的按钮之上,则无法单击已启用的按钮。
有什么方法可以将启用的按钮移到前面,或者允许将未启用的按钮单击到启用的按钮上?
答案 0 :(得分:1)
使用DataTrigger设置ZIndex属性:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter Property="Panel.ZIndex" Value="1"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>