Ich denke, ich bin versucht, etwas zu tun relativ einfach in WPF, aber kann nicht für das Leben von mir herauszufinden, wie; und denke, ich bin wahrscheinlich am Rande von overcomplicating it. Wpf linie zeichnen mit. Wenn ich ein raster, das waren 3 Zeilen und 3 Spalten, und ich wollte beitreten, um die Ecken von zwei Zellen zu erstellen, die eine Diagonale Grenze, was wäre der beste Weg, dies zu tun? Den Zeilen sollte idealerweise die Größe neu, wenn die Steuerung angepasst wird (also gebunden an den Ecken der Zelle? ). Im wesentlichen möchte ich die roten Linien im Diagramm hier gehostet: Beispiel Pic
Hierfür wird die Canvas. OnMouseMove Methode [4] überschrieben, um mittels validateVisual [5] ein Update des Canvas zu erzwingen, wodurch OnRender [6] aufgerufen wird. In der überschriebenen Methode OnRender [6] wird eine temporäre Linie gezeichnet, wobei als Endpunkt der Linie die aktuelle Mausposition (tPosition [8]) verwendet wird. Um OnRender überschreiben zu können, muss eine eigene Klasse von Canvas [7] abgeleitet werden (im Beispiel die Klasse MyCanvas). [WPF] Tausende verbundene Linien zeichnen. Zum Zeichnen wird die Klasse Canvas [7] verwendet, da dieser Elemente durch Positionensangabe mit der Einheit Pixel hinzugefügt werden können, was für das Zeichnen von Linien günstig ist. Schritt 3: Wenn nun ein zweiter Mausklick ausgeführt wird, und lineStarted ist bereits gesetzt, dann soll die Linie als neues Element dem Canvas hinzugefügt werden, damit diese dauerhaft angezeigt wird. Danach wird lineStarted wieder auf false gesetzt, um das Zeichnen neuer Linien zu ermöglichen. namespace LinienBeispiel { public partial class MainWindow: Window public MainWindow() InitializeComponent(); MyCanvas myc = new MyCanvas(); ckground =; this.
Allgemeine Diskussion Hi all, versuche schon seit längerem eine Wellenlinie auf einem Inkcanvas zu zeichnen. Also sowas wie die original gezeichnete Linie in eine Wellenlinie umwandeln. Mit Winform habe ich das ganze soweit hingekriegt, dass ich einer (sinus)-Funktion Anfangs- und Endpunkt angeben kann, das diese dann mit einer Wellenlinie verbindet, dies aber nur für gerade linien. 'Draw the curve Dim t As Graphics = CreateGraphics() Dim p As New Pen(, 1) 'A und B sind die Anfangs- Endpunkte t. DrawCurve(p, sine(A, B)) p = New Pen(Red, 2) 'drawWaveLine(t, p, A. X, A. Y, B. Wpf linie zeichnen 8. X, B. Y) End Sub Public Function sine( ByVal start As Point, ByVal ende As Point) As Point() Dim sidea As Integer = ende. X - start. X Dim sideb As Integer = ende. Y - start. Y Dim hypot As Double = CSng (Sqrt((sidea ^ 2) + (sideb ^ 2))) Dim angle As Double = CSng (Atan2(sideb, sidea)) Dim points As Point() = New Point(10) {} = "winkel: " & (rad2deg(angle), 0). ToString Dim c As Integer = 0, n As Integer = 10 While c <= 10 points(c) = New Point( CInt (hypot / 10 * c), n) n = -n c += 1 End While Dim mx As New () ( CSng (angle / * 180)) anslate(A. Y, ) ansformPoints(points) Return (points) End Function Das mit dem Benutzerdefinierten Rendern habe ich auch schon luck.
Die angezeigte Zeile unterscheidet sich von der Mausposition. Meine Ausgabe sollte wie ein Stiftwerkzeug aussehen. ist mit meinem Weg falsch? 2. Ist inkCanvas die einzige Möglichkeit, eine Linie in wpf zu zeichnen, wenn ja, warum? 3. Antworten: 0 für die Antwort № 1 ist mit meinem Weg falsch? Sie könnten versuchen, das einzustellen StartPosition Eigentum in der Image_MouseLeftButtonDown Ereignishandler: Image image = sender as Image;... StartPosition = tPosition(image);} InkCanvas ist das einzige integrierte WPF-Steuerelement, das Tintenstriche empfängt und anzeigt. Wpf linie zeichnen fur. Sie können aber z. B. Zeilen hinzufügen Canvas oder führen Sie jede andere Art von benutzerdefinierten Zeichnungsaktionen selbst aus. Hier ist ein grundlegendes Beispiel, das Ihnen die Idee geben sollte. public partial class MainWindow: Window public MainWindow () InitializeComponent();} Point EndPosition; Point StartPosition; private void canvas_MouseMove(object sender, MouseEventArgs e) FrameworkElement fe = sender as FrameworkElement; EndPosition = tPosition(fe); Line l = new Line(); StartPosition = EndPosition; (l);}} private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) StartPosition = tPosition(fe);}}
Alles Klar, für die welche es interessiert.. ich habe das Problem folgendermaßen gelöst: Ich habe ein WPF Control erstellt welches eine ImageSource darstellt. (Mittles einem Drawing objekt kann man ImageSources zeichnen. Auch der DrawingContext eines Control besitzt eine. DrawImage() methode welche als Parameter eine ImageSource verlangt. ) Diese ImageSource bekomme ich von einer, auf welcher ich mittles dem aphics meine Geometrie zeichnen kann. (Man muss die aber in eine erst konvertieren! ) Die WPF Geometry wird mit einem von mir geschriebenen Konverter in ein aphicsPath objekt konvertiert, welches dann schlussendlich mit dem aphics objekt gezeichnet wird. Das ganze ist ziemlich performant (10. 000 Linien in ca. 0. 25 Sekunden), und kann sogar Asynchron gerendert werden. Mittles eines Loop Events kann man seine Zeichnung sogar animieren. Alles in allem ziemlich umständlich und es ist bleibt kein Vektor, aber das kann ich am Ende doch einbüßen. Lg. Eine Wellenlinie auf einem InkCanvas zeichnen. Sora