OnMouseMove不会在WPF中的canvas上触发

我已完成自定义图表控件,我想在光标后面绘制一个简单的十字形。 该图表在Canvas上实现为PolyLine,我在Canvas的OnMouseMove事件中绘制两条线来更改它们的坐标。

令人惊讶的是发现当MainGUI线程空闲时,事件只被调用每10秒左右事件(UI完全响应,如果我暂停应用程序主线程在App mainForm.ShowDialog())

关于如何找到原因的任何想法都会发生? 我使用OnMouseMove或PreviewOnMouseMove获得相同的性能。

编辑:这就是我画十字架的方式(无论如何,如果我在OnMouseMove上设置一个断点,它只会不时停止)。

XAML:

    

CS:

  public Chart() { _line = new Polyline(); _line.Stroke = Brushes.Orange; _crossX = new Line(); _crossY = new Line(); _crossX.Stroke = Brushes.Orange; _crossY.Stroke = Brushes.Orange; _crossX.StrokeThickness = 1; _crossY.StrokeThickness = 1; InitializeComponent(); this.DrawArea.Children.Add(_line); this.DrawArea.Children.Add(_crossX); this.DrawArea.Children.Add(_crossY); } private void DrawArea_MouseMove(object sender, MouseEventArgs e) { Point mousePosition = System.Windows.Input.Mouse.GetPosition(this.DrawArea); _crossX.X1 = 0; _crossX.X2 = this.DrawArea.ActualWidth; _crossX.Y1 = _crossX.Y2 = mousePosition.Y; _crossY.Y1 = 0; _crossY.Y2 = this.DrawArea.ActualHeight; _crossY.X1 = _crossY.X2 = mousePosition.X; } 

这很奇怪,我不知道为什么……

FrameworkElement.MouseMove仅在区域具有一些显式背景画笔\ fill集时才有效。

在你的情况下设置Canvas.Background="Transparent" ,它应该工作。

还有另一个解决方法…… WPF在CaptureMouse()之后不发送MouseMove事件;

这可能是因为HitTest依赖于彩色像素及其反馈。

无论是什么,它都没有在MSDN上记录,并且让很多UI设计者感到困惑。