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