Frage

Ich suche nach Meinung zur Verwendung von Canvas vs. Grid-Panels in WPF. Ich muss klassischen Eingabemasken machen, die im Grunde Rasterlayouts haben, einige in kleinen Datagrids haben, Gruppenfelder, aber alle in Raster-Layout ausgerichtet sind. Ich bin zu kämpfen, ob Gitter oder Canvas-Panel für alle meine Formen zu verwenden. Gitter gibt mir gute Struktur; Ich kann die Ausrichtung der Kontrollen mehr easily¬ halten. Ich werde für alle Fenster Basisklasse (die inherits Window-Klasse) habe, so Designer in Visual Studio nutzlos sein werden, da es Probleme für diese Art von vererben hat, und mit Grid-Panel Ich weiß nicht wirklich, auch Designer braucht, und ich kann set Fenster SizeToContent so alles gut passt. Aber auch hier mit Canvas, ich habe die Fähigkeit zur Position steuert jede mögliche Weise, Ich mag, und dies ist nur Nutzen ich sehe, wenn Leinwand verwenden.

Ich habe nicht so viel Erfahrung in WPF auf vorherzusagen, welche Art von Problemen konnte ich von Kundenanfragen über das Layout erhalten. Auf Web-Formulare manchmal ich absolut verwenden Positionierung für Formulare für alle Fälle Kunde hat einige „besondere“ Anfrage, ob die Steuer Pixel Recht haben oder links auf höhere usw. jeder arbeitete mit anspruchsvollen Kunden wissen, was ich meine.

würde Ich mag, um zu sehen, was Sie denken, was sind Vor-und Nachteile für beide in der Layout-Gebäude Business-Bewerbungsformular? Warum ist man besser als die andere? Fälle, in denen eine Platte wäre schlecht zu bedienen, und andere nicht? Welche Nachteile einer Platte zu einem anderen? Welche Platte würden Sie nutzen?

Danke

War es hilfreich?

Lösung

Leinwand ist vor allem für benutzerdefinierte Zeichnen Funktionalität bestimmt mehr als alles andere. Das Raster ist definitiv die beste Wahl für Ihr Layout anpassen.

Andere Tipps

Sie können ziemlich eingehend mit dem tatsächlichen Layout der Gitter, Spalte / Zeile spanning, Breite, Höhe, etc. erhalten

Meiner Meinung nach ist wäre einfacher, das Layout der verschiedenen Elemente auf einem Gitter zu tun, indem Sie die Zeile und Spalte Sizez Steuerung als alles in eine Leinwand codierte schwer tun tun. Es wird auch die Dinge einfacher machen, wenn sie sich entscheiden, die Straße hinunter später Auflösungen zu ändern.

Von Adam Nathans WPF Unleashed (S. 168.):

  

Imitieren eine Leinwand mit Grid   Wenn Sie verlassen Gitter mit einer einzigen Zeile und Spalte und stellen Sie die Horizontal und   Vertical aller Kinder auf andere Werte als Stretch, erhalten die Kinder haben   die einzelne Zelle gerade wie eine Leinwand. Einstellen Horizontal nach links und   Vertical nach oben ist wie Canvas.Left und Canvas.Top auf 0 Einstellung Einstellung   Horizontal nach rechts und Vertical nach Unten ist wie Einstellung   Canvas.Right und Canvas.Bottom auf 0. Weiterhin Anwenden Margin Werte zu jedem   Element können Sie den gleichen Effekt geben, wie Canvas der angefügten Eigenschaften auf die gleiche Einstellung   Werte.

Sie kann auch mit dem Inhalt Ihrer Kontrollen im Netz kreativ ein feineres Maß an Kontrolle über das Layout zu haben.

wäre eine Leinwand für so etwas wie ein Dialogfeld gut sein, die selten Größe ändern, und hat nur wenige Kontrollen auf sie, weil sie bekommen würden zeitraubend, sie alle zu legen als die Zahl wächst.

Ich persönlich benutze Gitter selbst. Es kann ein wenig mehr Arbeit sein, die Dinge auf Pixelebene zu legen, sondern auch für das 5% der Zeit, die notwendig ist, lohnt es mich zum Abstrahieren vieler lästigen weg. Es ist auch schön, wenn es notwendig ist, Zeilen und Spalten im laufenden Betrieb, um die Größe macht das Gridsplitter, dass ein Kinderspiel.

Definitiv Grids zu sein scheint, was Sie für Ihre Anforderungen benötigen.

Ich würde Grids zu Tabellen in HTML-liken (sehr nützlich, wenn in geeigneter Weise verwendet), während Leinwand eher wie ein div ist. Der Unterschied ist, dass Grids ist, welche Tabellen in HTML sein sollte und ebenfalls mit divs vs Leinwand.

Zum Thema Grids, die Zeit nehmen, Ihre RowDefinitions und ColumnDefinitions zu definieren, anstatt Marge setzt auf Ihren Kontrollen alles richtig zu positionieren. Sie werden es bereuen, wenn Sie dies nicht tun.

Auch wenn Sie nicht VS-Designer verwenden, können Sie immer noch ein XAML visuellen Designer Ihre Raster Content erstellen / bearbeiten nutzen könnten.

Einer der wichtigsten Vorteile der UX WPF / SL / XAML ist die HTML-like 'Flüssigkeit' Layout-Fähigkeit. Auch wenn Sie es mit Ihrem aktuellen Design nicht brauchen, es ist eindeutig die Zukunft und es lohnt sich zu lernen, wie Finesse.

Prüfen

Rob Relyea ausgezeichneten Liste der verfügbaren XAML-Editoren

würde ich mit einem Gitter oder einer spezialisierten Grid Unterklasse gehen. Sie haben Recht, über Ansicht Vererbung. Die Visual Studio-Designer in UWP, erzeugen WPF Support-Code für die Basis und Unterklasse mit den gleichen Methodennamen. Es ist nicht zu kompilieren.

Da ich im Voraus Datum Generika wir zurück zur vorherigen Methoden gehen. Eine davon ist eine Hilfsklasse. Jede Ansicht implementiert IBaseView und hat eine Eigenschaft ViewHelper oder ViewHelper<T>. enum ViewHelperOptions kann auch erforderlich sein. Bei Bedarf kann jeder der Viewhelper Vererbung ohne Visual Designer zu brechen. Dies ermöglicht die Verwendung von generischem Code sowie spezifischen Code anzeigen, ohne das MVVM Modell zu brechen. Nennen wir es MVHVM als die Viewhelper Kenntnis der View Helfer hat. Diese weitere trennt die V von der VM.

Die vollständige Umsetzung gut kann die Verwendung von Activator.CreateInstance erfordern. Eine weitere Überlegung ist die Konstrukteurs, die von dem Designer aufgerufen werden. Sie müssen alle „will-Crash-if-not-running“ Code in eine von (sagen wir) das Loaded-Ereignis hervorgebracht Initialisierung bewegen.

: Alternativ können Sie nutzen (UWP) machen
if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{ DoStuffWhichShouldOnlyBeDoneAtRunTime(); }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top