Tôi đã thực hiện điều khiển biểu đồ tùy chỉnh và tôi muốn vẽ một hình chữ thập đơn giản theo con trỏ. Biểu đồ được thực hiện dưới dạng PolyLine trên Canvas và tôi vẽ hai đường thay đổi toạ độ của chúng tại sự kiện OnMouseMove của Canvas.OnMouseMove không kích hoạt trên canvas trong WPF
Điều ngạc nhiên là để phát hiện ra rằng sự kiện này được gọi là chỉ mỗi 10 giây hoặc lâu hơn sự kiện khi thread MainGUI là nhàn rỗi (giao diện người dùng hoàn toàn đáp ứng và nếu tôi tạm dừng việc áp dụng các chủ đề chính là tại App mainForm.ShowDialog())
.
Bất kỳ ý tưởng về làm thế nào để tìm thấy lý do tại sao điều này xảy ra tôi có được hiệu suất tương tự bằng cách sử dụng OnMouseMove hoặc PreviewOnMouseMove
EDIT: Đây là cách tôi vẽ cây thập tự (anyway nếu tôi đặt một breakpoint tại OnMouseMove nó chỉ đôi khi dừng lại)
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;
}
Bạn không thể xác định con trỏ tùy chỉnh, thay vì cố vẽ bản vẽ bổ sung thành "giả"? –
Vì vậy, bạn không có vấn đề về hiệu suất, nhưng vấn đề là sự kiện đơn giản không được gọi - tôi có hiểu điều này đúng không? –
| Daniel: Nó được gọi là bởi vì thập tự giá được sơn nhưng nó được cập nhật có thể 1 lần mỗi 10 giây hoặc lâu hơn. –