WPF将启用按钮移到前面

时间:2018-07-20 12:13:08

标签: c# wpf

我有一个包含许多矩形的画布,如下所示:

   <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>

为每个矩形创建一个按钮,并使用“按钮模板”将按钮“伪装”为矩形。这是为了使矩形可单击。

现在的问题是某些按钮已启用,而某些按钮未启用。因此,如果未启用的按钮位于已启用的按钮之上,则无法单击已启用的按钮。

有什么方法可以将启用的按钮移到前面,或者允许将未启用的按钮单击到启用的按钮上?

1 个答案:

答案 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>