我有一个带有ControlTemplate的WPF按钮,包括IsPressed属性上的触发器(如下所示的片段)。该按钮是一个 "按住 "类型的按钮,所以当按钮被按下时,我试图改变其颜色以提供一些视觉反馈。
所示的触发器效果很好。当你点击按钮时,颜色会发生变化,并保持变化,直到你释放鼠标--除了当鼠标被移出按钮时,同时仍被按下。在这种情况下,即使按钮仍被按下,颜色也会变回默认值,而且按钮的驱动机制一直持续到鼠标被释放。
有谁见过这个问题或者知道解决方法吗?这是我第一次使用WPF触发器的经验,所以非常感谢任何帮助。
谢谢大家。
这是我目前应用在按钮上的样式(去掉了一些不相关的东西)。
<Style x:Key="RS_LocalButtonStyle"
TargetType="Button">
<Setter Property="Margin"
Value="0,7,0,0" />
<Setter Property="HorizontalAlignment"
Value="Stretch" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
<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.Triggers>
<Trigger Property="Button.IsDefaulted"
Value="True">
<Setter Property="BorderBrush"
TargetName="border"
Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</Trigger>
<Trigger Property="ToggleButton.IsChecked"
Value="True">
<Setter Property="Background"
TargetName="border"
Value="#FFBCDDEE" />
</Trigger>
<Trigger Property="IsEnabled"
Value="False">
<Setter Property="Background"
TargetName="border"
Value="#FFF4F4F4" />
</Trigger>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
TargetName="border"
Value="#FFBEE6FD" />
</Trigger>
<Trigger Property="IsPressed"
Value="True">
<Setter Property="Background"
TargetName="border"
Value="{DynamicResource {x:Static SystemColors.GradientActiveCaptionBrushKey}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
事情是这样的 IsPressed
属性设置为 false
当你移动鼠标的按钮,但你可以替换你的 IsPressed
触发器如下 MultiTrigger
以达到你想要的目的。
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsMouseCaptured" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background"
TargetName="border"
Value="{DynamicResource {x:Static SystemColors.GradientActiveCaptionBrushKey}}"/>
</MultiTrigger>