如何在XAML中使用鼠标按下和松开事件来触发按钮的交互?

4
我有一个按钮,需要执行两个不同的命令(一个启动某些东西,另一个停止它)。经过一些研究,System.Windows.Interactivity.dll似乎提供了一种简单的方法来实现这一点。但是它不适用于左鼠标按钮(如果我使用MouseDoubleClick或MouseRightButtonDown等事件,它确实有效,但不是MouseDownMouseUp MouseRightButtonDown )...看起来按钮自己消耗了事件,并且interaction.trigger从未见到过它。下面是我的XAML片段,我该如何解决这个问题?
<Button Content="DoStuff">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseDown">
            <i:InvokeCommandAction Command="{Binding StartCommand}" />
        </i:EventTrigger>
        <i:EventTrigger EventName="MouseUp">
            <i:InvokeCommandAction Command="{Binding StopCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

你是否看过按钮类以检查可用于使用的事件?http://msdn.microsoft.com/zh-cn/library/system.windows.controls.button.aspx - eran otzap
是的,那是我做的第一件事。我尝试了PreviewDown/Up、MouseDown/Up、PreviewMouseLeftButtonDown/Up、MouseLeftButtonDown/Up以及PreviewMouseDown/Up,但它们都不起作用。 - AXG1010
2个回答

8
您可以使用PreviewMouseDownPreviewMouseUp代替。

这个有效,谢谢。我之前尝试过,但我的命令中有一个打字错误。你知道“预览”事件与它们的对应事件有什么区别吗? - AXG1010
@Omribitan,不知道为什么隧道预览可以工作,但气泡却不能?我猜想可能是某个元素出了问题。 - eran otzap
@AXG1010 WPF引入了一个称为Routed Events的新概念。其思想是事件首先由其创建者处理并向上爬升到控件层次结构(冒泡事件),或者由根元素首先处理并向下隧道到其创建者(隧道事件) - 这些是“Preview”事件。您可以在这里了解更多信息。 - Omri Btian

0

鼠标左键按下,鼠标左键松开


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接