【问题标题】:How to use mouseDown and mouseUp on <button/> [duplicate]如何在 <button/> 上使用 mouseDown 和 mouseUp [重复]
【发布时间】:2013-08-21 17:50:41
【问题描述】:

我有一个在 XAML 中声明的按钮,它具有 MouseDown 和 MouseUp 属性,它们都调用指定的方法...

<Button x:Name="btnBackward" Content="Backward"
        MouseDown="btnBackward_MouseDown" 
        MouseUp="btnBackward_MouseReleased" Width="50" Height="25" 
        Margin="65,400,377,45"/>

但是,btnBackward_MouseReleased 方法永远不会被调用。

private void btnBackward_MouseReleased(object sender, 
                                       System.Windows.Input.MouseEventArgs e)
{
    Console.WriteLine("mousereleased");
    this.isRewinding = false;
}

我错过了什么?

【问题讨论】:

标签: c# wpf xaml mouseevent mediaelement


【解决方案1】:

你应该在这里使用Preview events。所以,不是MouseDown 和MouseUp,而是挂钩到PreviewMouseDown 和PreviewMouseUp。

<Button x:Name="btnBackward" Content="Backward"
        PreviewMouseDown="btnBackward_MouseDown" 
        PreviewMouseUp="btnBackward_MouseReleased"/>

原因形式MSDN-

Button 抑制 MouseLeftButtonDown 和 MouseLeftButtonDown 由 Button 或其复合元素引发的冒泡事件 倾向于捕获鼠标并引发始终存在的 Click 事件 由 Button 本身引发。事件及其数据仍在继续 沿着路线,但是因为 Button 将事件数据标记为 已处理,仅针对明确指出它们的事件的处理程序 应该在handledEventsToo 的情况下被调用。如果其他元素 对你的应用程序的根仍然想要一个机会 处理控制抑制事件,一种替代方法是附加 将handledEventsToo 指定为true 的代码中的处理程序。但往往一个 更简单的技术是将您处理的路由方向更改为 输入事件的预览等效项。 例如,如果一个控件 抑制 MouseLeftButtonDown,尝试附加一个处理程序 PreviewMouseLeftButtonDown 改为。

但是,如果您右键单击按钮 MouseUp 和 MouseDown 事件将完美运行,因为在这种情况下单击不会耗尽事件并且它们会正确冒泡。

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多