我已经完成了自定义图表控件,我想在光标后面绘制一个简单的十字。该图表是在Canvas上实现的PolyLine,并在Canvas的OnMouseMove事件中更改它们的坐标绘制两条线。
令人惊讶的是,当界面线程空闲时(UI完全响应且如果我暂停应用程序,则主线程位于App的mainForm.ShowDialog()),该事件每10秒左右才被调用一次。
有任何想法如何找出为什么会发生这种情况吗?使用OnMouseMove或PreviewOnMouseMove都会获得相同的性能。
编辑:这是我如何绘制交叉点的方法(无论如何,如果我在OnMouseMove处放置断点,它只会偶尔停止)。
XAML:
令人惊讶的是,当界面线程空闲时(UI完全响应且如果我暂停应用程序,则主线程位于App的mainForm.ShowDialog()),该事件每10秒左右才被调用一次。
有任何想法如何找出为什么会发生这种情况吗?使用OnMouseMove或PreviewOnMouseMove都会获得相同的性能。
编辑:这是我如何绘制交叉点的方法(无论如何,如果我在OnMouseMove处放置断点,它只会偶尔停止)。
XAML:
<Border BorderThickness="1" BorderBrush="White" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Grid.ColumnSpan="2" >
<Canvas x:Name="DrawArea" PreviewMouseMove="DrawArea_PreviewMouseMove" />
</Border>
计算机科学:
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;
}