为什么 IsPressedChanged 事件不适用于交互触发器但其他事件可以?

Why does the IsPressedChanged event not work with an interaction trigger but other events do?

编辑: 简而言之:正如 AFigmentOfMyImagination 在他的回答中指出的那样,不存在 IsPressedChanged 事件。但是,这是原始问题:

我有一个按钮,我希望在按下按钮和释放按钮时都执行一个命令。按钮的标准命令绑定只能在按下或释放按钮时调用命令,所以我想我可能会在 IsPressedChanged 事件上使用交互触发器来实现我想要的,如下所示:

<Button xmlns:i="http://schemas.microsoft.com/xaml/behaviors">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="IsPressedChanged">
            <i:InvokeCommandAction Command="{Binding Path=SomeCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

但这不起作用。但是,当我使用 MouseEnter 事件等其他事件时,它确实有效。

现在我的问题是,这是为什么? IsPressedChanged事件和其他事件有什么区别?在我看来好像存在一些概念上的差异,我想知道那是什么(也许为什么需要有所不同)。

编辑: 我找到了一种方法,可以在每次 IsPressed 更改时执行命令。 .

中使用了该解决方案

IsPressedChangedMouseEvent的区别在于MouseEventButton提供的事件,而IsPressedChanged不是。

换句话说,不存在的东西不可能真正“起作用”...

EventTrigger 用于路由事件。
没有 IsPressedChanged 路由事件,Button 提供的唯一路由事件是 Click,它不符合您的需求。
global routed events中,你可以找到Mouse.MouseDownMouse.MouseUp,但你会错过通过键盘按下按钮的情况。

您可以通过数据触发器使用 Button.IsPressed 属性 并将绑定源设置为按钮(通过使用 ElementName or RelativeSource)。
但是你必须 bodge 它一点,所以如果值为 truefalse.
它就会触发 幸运的是,truefalse 都不等于空字符串。通过将 DataTrigger.Comparison 设置为 "NotEqual" 并将 Value 设置为 "",您可以确保每次 IsPressed 更改时触发触发器。
(一个可能的不良影响:它在创建控件后立即触发。)

<Button x:Name="Button">
    <i:Interaction.Triggers>

<!--
        You can also use this binding
        <i:DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Button},  
                                         Path=IsPressed}"
-->

        <i:DataTrigger Binding="{Binding ElementName=Button, Path=IsPressed}"
                       Comparison="NotEqual"
                       Value="">
            <i:InvokeCommandAction Command="{Binding Path=PressedChangedCommand}"/>
        </i:DataTrigger>
    </i:Interaction.Triggers>
</Button>

可用的工作演示 here