WPF:Canvas吞咽MouseDownEvent?

任何人都可以向我解释为什么在这个简单的例子中MouseDown事件没有到达ScrollViewer

         

代码背后:

 using System; using System.Windows; using System.Windows.Input; namespace MouseDownTest { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); scrollViewer.AddHandler(MouseDownEvent, new RoutedEventHandler(ScrollViewer_Test)); } private void ScrollViewer_Test(object sender, RoutedEventArgs routedEventArgs) { Console.WriteLine("ScrollViewer_Test"); } private void Canvas_MouseDown(object sender, MouseButtonEventArgs e) { Console.WriteLine("Canvas_MouseDown"); } private void Canvas_PreviewMouseDown(object sender, MouseButtonEventArgs e) { Console.WriteLine("Canvas_PreviewMouseDown"); } private void ScrollViewer_MouseDown(object sender, MouseButtonEventArgs e) { Console.WriteLine("ScrollViewer_MouseDown"); } private void ScrollViewer_PreviewMouseDown(object sender, MouseButtonEventArgs e) { Console.WriteLine("ScrollViewer_PreviewMouseDown"); } } } 

单击canvas时的输出是

 ScrollViewer_PreviewMouseDown Canvas_PreviewMouseDown Canvas_MouseDown 

为什么ScrollViewer_MouseDown被省略? 我已经看过这篇文章,但那里给出的解决方案没有帮助(或者我做错了)。

您可能需要在ScrollViewer上设置Focusable="False"以允许鼠标事件通过

   

输出:

 ScrollViewer_PreviewMouseDown Canvas_PreviewMouseDown Canvas_MouseDown ScrollViewer_MouseDown