【问题标题】:WPF IsPressed trigger going away when mouse leaves button当鼠标离开按钮时 WPF IsPressed 触发器消失
【发布时间】:2020-08-27 11:38:40
【问题描述】:

我有一个带有 ControlTemplate 的 WPF 按钮,其中包括 IsPressed 属性上的触发器(如下所示的 sn-p)。该按钮是一种“按住”类型的按钮,因此在按下按钮时,我正在尝试更改其颜色以提供一些视觉反馈。

显示的触发器效果很好。当您单击按钮时,颜色会发生变化,并且在您释放鼠标之前一直保持变化 - 除非鼠标移出按钮但仍被按下时。在这种情况下,颜色会变回默认值,即使按钮仍被按下并且按钮驱动的机制继续运行,直到释放鼠标。

有其他人看到这个问题或知道解决方案吗?这是我第一次使用 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】:

问题是,当您移动按钮的鼠标时,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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多