C# 基于样式不使用复选框

C# 基于样式不使用复选框,c#,wpf,C#,Wpf,我在资源字典中定义了一种样式,使我的复选框看起来像一个按钮: <Style TargetType="CheckBox" x:Key="CBCheckBoxButton"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CheckBox}"> <Bor

我在资源字典中定义了一种样式,使我的复选框看起来像一个按钮:

<Style TargetType="CheckBox" x:Key="CBCheckBoxButton">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <Border Name="BackgroundBorder" Background="Black" CornerRadius="20">
                    <Grid>
                        <Rectangle x:Name="UpperRect" Margin="1" Grid.Row="0" RadiusX="20" RadiusY="20" Fill="{StaticResource GrayGradient}"/>
                        <TextBlock Name="ButtonContent" Text="{TemplateBinding Content}" Margin="3" VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap" />
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="UpperRect" Property="Fill" Value="{StaticResource LightBlueGradient}" />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter TargetName="UpperRect" Property="Fill" Value="{StaticResource BlueGradient}" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="BackgroundBorder" Property="Background" Value="DarkGray"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Effect" Value="{StaticResource ShadowEffect}" />
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="FontFamily" Value="Calibri"/>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="DarkGray"/>
            <Setter Property="Effect" Value="{StaticResource DisableShadowEffect}" />
        </Trigger>
    </Style.Triggers>
</Style>

这样使用时效果非常好:

<CheckBox Width="80" Height="80" Margin="10" Content="{Binding Y2LockAxisString}" Command="{Binding Y2LockDisableEnableCommand}" Style="{StaticResource CBCheckBoxButton}"/>

但是我需要添加一个样式,以便根据复选框的状态调用不同的命令等。所以我使用了basedon属性:

<CheckBox Width="80" Height="80" Margin="10">
            <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource CBCheckBoxButton}">
                <Style.Triggers>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Command" Value="{Binding ExecuteX2LockDisable}" />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="False">
                        <Setter Property="Command" Value="{Binding ExecuteX2LockEnable}" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </CheckBox>

但是该复选框看起来像一个默认复选框,没有应用任何外观元素


为什么外观样式不起作用?

看起来您是在将
样式
添加为
内容
,而不是
样式

你试过了吗

<CheckBox Width="80" Height="80" Margin="10">
    <CheckBox.Style>
         <Style --- snip --->
         </Style>
    </CheckBox.Style>
</CheckBox>

谢谢,你说得对!我一看到你的回答就知道发生了什么事。我在寻找一个更困难的事业。