ho fatto il mio controllo grafico personalizzato e voglio disegnare un semplice cross del cursore. Il grafico è implementato come un PolyLine su una tela e sto disegnando due linee che cambiano le loro coordinate nell'evento OnMouseMove della tela.OnMouseMove non si attiva su tela in WPF
La sorpresa è stata di fondare che l'evento vengono chiamati solo ogni 10 secondi o giù di lì evento quando il thread MainGUI è inattivo (l'interfaccia utente è completamente reattivo e se mi fermo l'applicazione il thread principale è su App mainForm.ShowDialog())
.
Qualche idea su come trovare perché sta succedendo questo ho le stesse prestazioni utilizzando l'OnMouseMove o PreviewOnMouseMove
EDIT: questo è come io dipingo la croce (in ogni caso se metto un punto di interruzione al solo OnMouseMove si ferma di tanto in tanto)
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;
}
Non si può definire un cursore personalizzato, piuttosto che cercare di eseguire un disegno aggiuntivo per "falso"? –
Quindi, non si ha un problema di prestazioni, ma il problema è che l'evento semplicemente non viene chiamato - ho capito bene? –
| Daniel: Si chiama perché la croce è dipinta ma viene aggiornata forse 1 volta ogni 10 secondi circa. –