【问题标题】:Checkbox IsMouseOver wont work复选框 IsMouseOver 不起作用
【发布时间】:2016-12-15 20:23:53
【问题描述】:

当我添加这个控件模板时,我的复选框消失了,只显示了复选框文本。当鼠标悬停时文本背景变为红色,当鼠标悬停时如何让我的复选框背景变为红色?

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

【问题讨论】:

  • 将触发器作为 Style.Triggers 而不是 ControlTemplate.Triggers
  • 我得到成员“触发器”不可访问或不可识别?
  • 如何声明CheckBox?它是否明确引用了样式?

标签: c# wpf xaml checkbox controltemplate


【解决方案1】:

这适用于某些属性(例如,尝试FontSize),但不适用于其他属性。 CheckBox 的默认模板有它自己的触发器,它们不会被 TemplateBindings 之类的东西打扰。

This post 告诉您如何提取ComboBox 的默认模板。以下是显示您的问题的摘录:

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

您最好的选择可能是覆盖整个模板。令人高兴的是,它并没有复杂...


  1. 删除您自己的模板。
  2. Follow the steps outlined in the post I linked to。这应该会为您提供默认 CheckBox 模板的副本。
  3. 修改该副本。特别是我摘录的IsMouseOver 触发器:将{StaticResource OptionMark.MouseOver.Background} 更改为Red

如果还不清楚,see this related post

【讨论】:

  • 你能解释一下吗,好像我已经做了你所做的?抱歉,我是 xaml 的初学者
  • 非常感谢 Petter!我必须复制默认的复选框模板才能使其正常工作。
  • 我用扩展器做同样的事情吗?我的圆形白色扩展按钮没有显示在我的操作系统中。你知道有什么解决办法吗? @petter
  • 不知道——你可以将它作为一个新问题发布,无论代码/XAML 没有按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多