如何在<button> </button>上使用mouseDown和mouseUp

时间:2013-08-21 17:50:41

标签: c# wpf xaml mouseevent mediaelement

我在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;
}

我错过了什么?

1 个答案:

答案 0 :(得分:9)

您应该在这里使用Preview events。因此,取代MouseDownMouseUp,而不是PreviewMouseDownPreviewMouseUp

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

原因形式MSDN -

  

按钮禁止MouseLeftButtonDown和MouseLeftButtonDown   Button或其复合元素引发的冒泡事件   有利于捕获鼠标并提升始终的Click事件   由Button本身提出。该事件及其数据仍在继续   沿着路线,但因为按钮将事件数据标记为   处理,只有特别表明他们的事件的处理程序   应该在handleEventsToo案例中调用。如果是其他元素   对你的应用程序的根仍然希望有机会   处理控制抑制事件,一种替代方法是附加   代码中的处理程序,handleEventsToo指定为true。但经常是   更简单的技术是改变你处理的路由方向   预览相当于输入事件。 例如,如果是控件   抑制MouseLeftButtonDown,尝试为其附加处理程序   相反,PreviewMouseLeftButtonDown

但是,如果您右键单击按钮MouseUpMouseDown事件将完美地发挥作用,因为在这种情况下,点击不会消耗事件并且它们已正确冒泡。