我在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;
}
我错过了什么?
答案 0 :(得分:9)
您应该在这里使用Preview events
。因此,取代MouseDown
和MouseUp
,而不是PreviewMouseDown
和PreviewMouseUp
。
<Button x:Name="btnBackward" Content="Backward"
PreviewMouseDown="btnBackward_MouseDown"
PreviewMouseUp="btnBackward_MouseReleased"/>
原因形式MSDN -
按钮禁止MouseLeftButtonDown和MouseLeftButtonDown Button或其复合元素引发的冒泡事件 有利于捕获鼠标并提升始终的Click事件 由Button本身提出。该事件及其数据仍在继续 沿着路线,但因为按钮将事件数据标记为 处理,只有特别表明他们的事件的处理程序 应该在handleEventsToo案例中调用。如果是其他元素 对你的应用程序的根仍然希望有机会 处理控制抑制事件,一种替代方法是附加 代码中的处理程序,handleEventsToo指定为true。但经常是 更简单的技术是改变你处理的路由方向 预览相当于输入事件。 例如,如果是控件 抑制MouseLeftButtonDown,尝试为其附加处理程序 相反,PreviewMouseLeftButtonDown 。
但是,如果您右键单击按钮MouseUp
,MouseDown
事件将完美地发挥作用,因为在这种情况下,点击不会消耗事件并且它们已正确冒泡。