即使光标位于canvas之外,也会调用MouseMove事件

我不知道我的代码或WPF是否有问题,但问题是:我想创建一个小程序,你可以在canvas中用光标绘制。 我有一个简单的WPF窗口:

               

这是后台代码:

  private void StackPan_MouseDown(object sender, MouseButtonEventArgs e) { draw = true; } private void StackPan_MouseUp(object sender, MouseButtonEventArgs e) { draw = false; } private void StackPan_MouseMove(object sender, MouseEventArgs e) { if (draw) { var pos = Mouse.GetPosition(imageCanvas); Rectangle rec = new Rectangle() { Width = 10, Height = 10, Fill = Brushes.Red, }; Canvas.SetTop(rec, pos.Y); Canvas.SetLeft(rec, pos.X); imageCanvas.Children.Add(rec); } } 

我能做的是以下内容: https : //www.dropbox.com/s/7moq4p8f8f409b3/wpf_canvas.png

为什么StackPan_MouseMove在光标位于canvas之外时调用?

这是可执行文件,您可以在其中注意到此行为: https ://www.dropbox.com/s/ye1w2j9chld2oif/WpfApplication1.exe

尝试将Canvas放在Border控件中,并将Border控件的ClipToBounds属性设置为true

     

稍微不同的是,似乎InkPresenter / InkCanvas可能更适合您正在尝试的操作,除非您出于特定原因而避开它们。

您可以通过Canvas的Rectangle子项获取MouseMove事件。

虽然你应该更好地使用InkPresenter或InkCanvas(正如用户keyboardP所说的那样),你可以简单地使矩形不可见以进行测试。 然后他们将不再产生任何输入事件。

 Rectangle rec = new Rectangle() { Width = 10, Height = 10, Fill = Brushes.Red, IsHitTestVisible = false // here };