【发布时间】:2011-12-07 13:02:35
【问题描述】:
我已经完成了我的自定义图表控件,我想在光标之后画一个简单的十字。该图表被实现为画布上的折线,我在画布的 OnMouseMove 事件中绘制两条线来改变它们的坐标。
令人惊讶的是,当 MainGUI 线程空闲时(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>
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;
}
【问题讨论】:
-
你不能定义一个自定义光标,而不是尝试做额外的绘图来“假”一个吗?
-
所以,您没有性能问题,但问题是事件根本没有被调用 - 我理解对吗?
-
|Daniel:之所以这么叫,是因为画了十字架,但它可能每 10 秒左右更新 1 次。
-
@Damien:它不是游标,而是跨越图表的十字形,让您可以看到所代表数据的不同级别。
-
你能展示一下你是怎么画十字架的吗?在 OnRender 中?小时候在画布上更新位置?请显示一些代码。
标签: c# wpf performance events