2 Stimmen

Erweitern Sie das Raster, oder kann ein anderes Panel angepasst werden?

Ich möchte Sie alle um Rat fragen, wenn ich darf, zu einigen Designfragen. Ich mache eine Simulation eines britischen IECC-Eisenbahnstellwerks, nur so zum Spaß :D

Hier ist ein Beispiel aus dem wirklichen Leben: http://photos.signallingnotices.org.uk/photo.php?pc=77&p=IMG_7319.JPG Es handelt sich um 80er-Jahre-Technologie mit einfachen Grafiken.

Es handelt sich im Wesentlichen um ein Raster mit Zellen fester Größe, das eine benutzerdefinierte Bitmap-Schriftart verwendet.

Meine Version wird WPF verwenden, um viel mehr Flexibilität zu ermöglichen, aber immer noch das gleiche grundlegende Aussehen haben, außer dass das Original über eine Reihe von Monitoren paginiert ist, wird meine eine große scrollbare sein \zoomable Gitter. Ich möchte auch, dass das Raster sozusagen unendlich ist (zumindest im Editor, der Sim-Teil braucht es nicht) und Zeilen hinzugefügt werden. \columns wie erforderlich.

Bei meinen ersten Versuchen habe ich ein Raster und Rechtecke verwendet, um es mir anfangs leicht zu machen. Die Rechtecke werden wahrscheinlich auf eine niedrigere Ebene geändert werden, je nachdem, wie gut es funktioniert.

Ich stoße auf einige Probleme, die mich glauben lassen, dass ich etwas Besseres als Grid verwenden könnte.

Im "Editor"-Modus sollte ich in der Lage sein, ein neues Element hinzuzufügen, indem ich ein Kontextmenü verwende oder eine leere Zelle im Raster auswähle. Alle Lösungen, um herauszufinden, welche Zelle ausgewählt wurde, scheinen das Hinzufügen von transparenten Rechtecken zu jeder Zelle oder Hacks mit Treffertests und Schleifenbildung durch jede Zelle zur Prüfung auf Überschneidungen zu beinhalten.

Da ich es mit mehreren 1000 Zellen zu tun haben könnte, ist keine dieser Lösungen geeignet. scheint nicht wirklich geeignet zu sein, und ich frage mich, ob ein Standardgitter der beste Weg ist, um vorzugehen.

Ich würde auch gerne Gruppen von Elementen per Drag & Drop verschieben können...

Das Raster hat kein Konzept für eine "Zelle". Ich kann nur die Zeile \column wenn es in dieser Zeile einen Inhalt gibt \column.

Jede Zelle wird nur ein Bildmaterial enthalten.

Gibt es eine bessere Möglichkeit als ein Standardgitter? Wäre es besser, ein benutzerdefiniertes Panel zu erstellen, ein bestehendes zu erweitern, oder gibt es eine bestehende kostenlose 3rd-Party-Steuerung, die helfen könnte? Mein Gehirn scheint nicht in der Lage zu sein, sich etwas anderes als ein Grid vorzustellen :D

1voto

David Punkte 5896

Ich weiß nicht, wie es mit den Panels von Drittanbietern aussieht, aber ich denke, das Grid ist die beste Option, die Sie haben.

Ich würde Folgendes tun:

  • ein Raster, bei dem jede Zelle ein transparentes Rechteck enthält (selbst bei 1000en von Zellen ist das kein Problem, siehe unten)
  • ein Panel, das das Raster kapselt (z. B. StackPanel oder ein anderes Panel, das Ihnen am besten gefällt, solange Sie ihm die Eigenschaft IsVirtualizing zuweisen können)
  • dann würde ich die VirtualizingPanel.IsVirtualizing = true y VirtualizingPanel.VirtualizationMode = VirtualizationModes.Recycling in diesem Bereich, um das Layout der App zu vereinfachen.

und Voilà! Ich glaube nicht, dass Sie mehr als das brauchen, und ich bin mir ziemlich sicher, dass Sie mit weniger als dem nicht auskommen, ohne die von Ihnen erwähnten "Hacks" zu verwenden (obwohl ich sie in diesem Fall nicht als "Hacks" bezeichnen würde)

NB: Dies setzt voraus, dass Ihr Raster scrollt (da ich denke, dass "1000e" Zellen nicht auf Ihren Bildschirm passen). Wenn Sie beabsichtigen, Ihr Raster vollständig auf dem Bildschirm anzuzeigen, ist die Virtualisierung im Grunde nutzlos, und Sie müssen eine der beiden von Ihnen beschriebenen Methoden verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X