He hecho mi control de gráfico personalizado y quiero dibujar una cruz simple siguiendo el cursor. El gráfico se implementa como una línea poligonal sobre un lienzo y dibujo dos líneas cambiando sus coordenadas en el evento OnMouseMove del lienzo.OnMouseMove no dispara en lienzo en WPF
La sorpresa fue encontrado que el evento de ser llamado sólo cada 10 segundos aproximadamente evento cuando el hilo MainGUI está inactivo (la interfaz de usuario es totalmente sensible y si detengo la aplicación del hilo principal está en la App mainForm.ShowDialog())
.
Alguna idea sobre cómo encontrar qué sucede esto me da el mismo rendimiento utilizando el OnMouseMove o la PreviewOnMouseMove
EDIT: esta es la forma en que pinto la cruz (de todas formas si pongo un punto de interrupción en el OnMouseMove sólo se detiene de vez en cuando).
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;
}
¿No podría definir un cursor personalizado, en lugar de intentar hacer un dibujo adicional para "falsificar" uno? –
Entonces, no tiene un problema de rendimiento, pero el problema es que el evento simplemente no se está convocando, ¿entiendo esto bien? –
| Daniel: Se llama porque la cruz está pintada, pero se actualiza quizás una vez cada 10 segundos más o menos. –