一件经常令人恼火的事情是,默认WPF控件的一些可视方面是以一种不可配置的方式进行编码的。鼠标悬停背景就是一个例子(滚动条大小是另一个…GRRR!!!!)。您可以通过为ToggleButton定义自己的模板并消除mouseover触发器来解决这个问题。下面是一个简单的例子:
<ToggleButton x:Name="changeButBorderedBlinky" Width="40" Height="40" Background="Transparent">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Content" Value="EDIT"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<ContentPresenter x:Name="contentPresenter"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
Focusable="False"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Content" Value="Done"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
此外,要更改触发器中的属性,必须以样式设置,而不是直接设置。这就是为什么鼠标悬停触发器中的内容不会发生变化的原因。如果删除它的属性设置,并且
将它与setter一起添加到样式中,它将允许触发器更改它。
这样做的一个缺点是,它会覆盖所有默认模板触发器,这样您就不会再看到何时选中ToggleButton,除非您也为“IsChecked”添加触发器。(如果需要更改触发器中的背景,请将background属性移动到setter,就像我对内容所做的那样)
希望有帮助…