繁体   English   中英

WPF IsPressed 触发器在鼠标离开按钮时消失

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM