复选框 IsMouseOver 不起作用
Checkbox IsMouseOver wont work
当我添加这个控件模板时,我的复选框消失了,只显示了复选框文本。当鼠标悬停时文本背景变为红色,当鼠标悬停时如何让我的复选框背景变红?
<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
),但不适用于其他属性。 CheckBox
的默认模板有自己的触发器,它们不会为 TemplateBinding
s.
这样的事情烦恼
This post 告诉您如何提取 ComboBox
的默认模板。这是显示您的问题的摘录:
<ControlTemplate.Triggers>
...
<Trigger Property="IsMouseOver" Value="true">
<Setter
Property="Background"
TargetName="checkBoxBorder"
Value="{StaticResource OptionMark.MouseOver.Background}"/>
...
</Trigger>
...
</ControlTemplate.Triggers>
最好的办法可能是覆盖整个模板。令人高兴的是,它并不 太 复杂...
- 删除您自己的模板。
- Follow the steps outlined in the post I linked to。那应该给你一个默认
CheckBox
模板的副本。
- 修改那个副本。特别是,我摘录的
IsMouseOver
触发器:将 {StaticResource OptionMark.MouseOver.Background}
更改为 Red
。
如果还不清楚,see this related post。
当我添加这个控件模板时,我的复选框消失了,只显示了复选框文本。当鼠标悬停时文本背景变为红色,当鼠标悬停时如何让我的复选框背景变红?
<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
),但不适用于其他属性。 CheckBox
的默认模板有自己的触发器,它们不会为 TemplateBinding
s.
This post 告诉您如何提取 ComboBox
的默认模板。这是显示您的问题的摘录:
<ControlTemplate.Triggers>
...
<Trigger Property="IsMouseOver" Value="true">
<Setter
Property="Background"
TargetName="checkBoxBorder"
Value="{StaticResource OptionMark.MouseOver.Background}"/>
...
</Trigger>
...
</ControlTemplate.Triggers>
最好的办法可能是覆盖整个模板。令人高兴的是,它并不 太 复杂...
- 删除您自己的模板。
- Follow the steps outlined in the post I linked to。那应该给你一个默认
CheckBox
模板的副本。 - 修改那个副本。特别是,我摘录的
IsMouseOver
触发器:将{StaticResource OptionMark.MouseOver.Background}
更改为Red
。
如果还不清楚,see this related post。