样式基于不使用复选框

时间:2015-04-30 14:43:04

标签: c# wpf

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您似乎将Style添加为Content,而不是Style

你试过吗

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