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

问题描述 投票:0回答:1

我有一个带有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>
c# wpf button triggers controltemplate
1个回答
0
投票

事情是这样的 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>
© www.soinside.com 2019 - 2024. All rights reserved.