C# 这种方法行不通

C# 这种方法行不通,c#,wpf,xaml,checkbox,controltemplate,C#,Wpf,Xaml,Checkbox,Controltemplate,当我添加此控件模板时,我的复选框将消失,并且只显示复选框文本。当鼠标在文本背景上时,背景变为红色,当鼠标在文本背景上时,如何使复选框背景变为红色 <Style TargetType="CheckBox" x:Key="Checkbox"> <Setter Property="BorderThickness" Value="2" /> <Setter Property="VerticalAlignment" Value=

当我添加此控件模板时,我的复选框将消失,并且只显示复选框文本。当鼠标在文本背景上时,背景变为红色,当鼠标在文本背景上时,如何使复选框背景变为红色

<Style TargetType="CheckBox" x:Key="Checkbox">
    <Setter Property="BorderThickness"          Value="2" />
    <Setter Property="VerticalAlignment"        Value="Top" />
    <Setter Property="Margin"                   Value="20,15,0,0" />
    <Setter Property="FontFamily"               Value="/Resources/Fonts/Source Sans Pro/#Source Sans Pro" />
    <Setter Property="FontSize"                 Value="14" />
    <Setter Property="HorizontalAlignment"      Value="Left" />
    <Setter Property="Foreground"               Value="{DynamicResource CheckboxForegroundColor}" />
    <Setter Property="Background"               Value="{DynamicResource CheckboxBackgroundColor}" />
    <Setter Property="BorderBrush"              Value="{DynamicResource CheckboxBorderbrushColor}"/>


    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <CheckBox  Background="{TemplateBinding Background}" >
                    <ContentPresenter  />
                </CheckBox>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

这将适用于某些属性(例如,请尝试
FontSize
),但不适用于其他属性。
复选框的默认模板有自己的触发器,它们不需要处理
TemplateBinding
s之类的事情

告诉您如何提取组合框的默认模板。下面是一个摘录,它显示了您的问题:

<ControlTemplate.Triggers>
    ...
    <Trigger Property="IsMouseOver" Value="true">
        <Setter
            Property="Background"
            TargetName="checkBoxBorder"
            Value="{StaticResource OptionMark.MouseOver.Background}"/>
        ...
    </Trigger>
    ...
</ControlTemplate.Triggers>

...
...
...
您最好的选择可能是覆盖整个模板。幸运的是,它并不太复杂


  • 删除您自己的模板
  • 。这将为您提供默认
    复选框的副本
  • 修改那个副本。特别是,我摘录的
    IsMouseOver
    触发器:将
    {StaticResource OptionMark.MouseOver.Background}
    更改为
    红色


  • 如果仍不清楚,请将触发器作为样式。触发器而不是ControlTemplate.TriggersI获取成员“触发器”不可访问或无法识别?…如何声明
    复选框
    ?是的,你能解释一下吗,好像我已经做了你做的事?对不起,我是Xaml的初学者,非常感谢!,我必须复制默认的复选框模板才能使其工作。我对expander也做同样的事情吗?我的圆形白色扩展器按钮在我的操作系统中不显示。你知道什么解决办法吗@petterDunno——您可以将其作为一个新问题发布,无论代码/XAML是否按预期工作。