Ich muss ein digitales Signal zeichnen und jeden Teil der Zeilen in WPF verschieben können.
Wie im Bild unten gezeigt, zeigen die Pfeile an, in welche Richtung der Teil der Linie bewegt werden kann. Durch Klicken und Ziehen des "anklickbaren Bereichs" wird das gesamte Quadrat nach links oder rechts verschoben.
Ich habe mir einige Möglichkeiten ausgedacht:
Polyline
Objekt. Aber ich kann nicht jeden Teil der Linie kontrollieren. Line
Objekt. Bei jeder Änderung sollten alle Linien ihre Standorte anpassen. Schwer zu kontrollierende "anklickbare Fläche". Vielleicht auch kompliziert. Border
Objekt. Jeder Abschnitt wird tatsächlich ein Rahmen sein, der die entsprechende Grenzseite ein- / ausblenden wird. Ich bin mir nicht sicher, wie einfach es ist, bewegliche Seiten der Grenze zu machen. Meine Frage ist, was ist der richtige Weg, um damit anzufangen?
Ein paar Dinge zu beachten ...
a Thumb
ist ein gutes Steuerelement, mit dem Sie Ihre ziehbaren Objekte starten können, da es bereits geeignete Ereignisse enthält, mit denen Sie es verschieben können. Indem du es templatierst, kannst du ihm jede Form geben, die du magst.
Sie können durch clevere Verwendung von Grid
und entsprechend platzierten Grid Splittern kostenlos ziehbare Linien erhalten. Wenn das nicht funktioniert, könnten 4 Rechtecke gut funktionieren. Sie fügen sie in DockingPanel
mit der Platzierung oben, links, rechts und der letzten Füllung ein, und Sie haben genug Primitive, um auf alle gewünschten Ereignisse zu reagieren.
Ich kann das aufschreiben, wenn Sie möchten, aber hier ist, wie ich es tun würde ...
Pflegen Sie eine Liste von Paar & lt; x_position, Höhe) & gt; Sortieren Sie es nach X. Tun Sie dies in einem benutzerdefinierten Steuerelement.
Zeichnen Sie das in einer for-Schleife. Ermitteln Sie Klicks, indem Sie die Liste durchsuchen. Handle einige Maus zieht, Bildschirm aktualisieren.
Die for-Schleife würde auf meine Liste [i] und meine Liste [i + 1] schauen. Zeichnen Sie ein Rechteck mit dieser Information.
Ich programmiere normalerweise nicht in WPF, aber ich kann es in einer halben Stunde herausfinden, wenn Sie möchten.
Hier ist ein Code ............. Addiere Code zum Namespace, baue dann und füge die Komponente zum Formular hinzu:
%Vor%Wenn Sie die Segmente ziehen, überlappen Sie sie nicht - ich habe es nicht dafür codiert. Aber das ermöglicht es, das Signal zu sehen und das Signal zu bewegen.
Nach der Größenänderung mit der Maus:
PS: Ich habe nicht versucht, den Produktionscode zu optimieren oder zu versuchen, sondern habe ihn einfach rausgeschmissen.
Tags und Links wpf .net c# user-interface