当鼠标离开按钮时,WPF IsPressed触发器将消失



我有一个带有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,但您可以用以下MultiTrigger替换IsPressed触发器以实现您想要的:

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

最新更新