[英]WPF IsPressed trigger going away when mouse leaves button
我有一个带有 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.