Mi piacerebbe creare un'app WPF che traccia la posizione del cursore del mouse, aggiornando l'immagine nel gestore di eventi MouseMove. Il mio pensiero originale era quello di creare un GeometryDrawing e quindi aggiungere percorsi a questo, ma io sto lottando con il modo di collegarlo in codice (anche se Xaml per GeometryDrawings sembra semplice). Qual è il modo più semplice per cablare questa roba - è solo per il debug, quindi non sono preoccupato per l'efficienza.Il modo più semplice per disegnare una sequenza di punti in WPF dal codice
5
A
risposta
13
Cosa ne pensi di utilizzare Polyline?
Ecco il codice XAML:
<Window
x:Class="CursorLine.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
>
<Canvas x:Name="canvas" Background="#00FFFFFF" MouseMove="Canvas_MouseMove">
<Polyline x:Name="polyline" Stroke="DarkGreen" StrokeThickness="3"/>
</Canvas>
</Window>
Ecco il codice dietro:
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
polyline.Points.Add(e.GetPosition(canvas));
}
2
Utilizzare un gruppo Geometry. Questo può avere più geometrie figlio: nel tuo caso devi aggiungere una EllipseGeometry per ciascun punto di movimento del mouse, centrato sulla posizione del mouse. Quindi, qualcosa di simile a:
private GeometryGroup _allMousePoints = new GeometryGroup();
void OnMouseMove(...)
{
_allMousePoints.Children.Add(
new EllipseGeometry {
Center = mouseLocation,
RadiusX = 3,
Radius Y = 3
});
}
È ora possibile utilizzare _allMousePoints come la geometria di un GeometryDrawing o dati di un percorso.
Non proprio quello che si sta cercando di fare ... ma non dimenticare InkCanvas che consente "inchiostrare" sopra qualcosa ... in modo relativamente semplice. Ma InkCanvas non risponde alla tua domanda, quindi ho pensato di commentare invece. – cplotts