Frage

Einige WPF-Steuerelemente (wie die Button) scheinen problemlos den gesamten verfügbaren Platz in seinem Container zu beanspruchen, wenn Sie nicht die Höhe angeben, die er haben soll.

Und einige, wie die, die ich gerade verwenden muss, die (mehrzeiligen) TextBox und das ListBox scheinen mehr darauf bedacht zu sein, nur den Platz zu beanspruchen, der für ihren Inhalt nötig ist, und nicht mehr.

Wenn Sie diese Kerle in eine Zelle stecken UniformGrid, sie werden erweitert, um dem verfügbaren Platz zu entsprechen.Jedoch, UniformGrid Instanzen sind nicht für alle Situationen geeignet.Was wäre, wenn Sie ein Raster haben, bei dem einige Zeilen auf eine *-Höhe eingestellt sind, um die Höhe zwischen sich selbst und anderen *-Zeilen aufzuteilen?Was ist, wenn Sie eine haben StackPanel und du hast ein Label, A Listund ein Button, wie können Sie dafür sorgen, dass die Liste den gesamten Platz einnimmt, der nicht von der Beschriftung und der Schaltfläche beansprucht wird?

Ich würde denken, dass dies wirklich eine Grundanforderung an das Layout wäre, aber ich kann nicht herausfinden, wie ich sie dazu bringen kann, den Raum auszufüllen, den sie könnten (indem man sie in ein... DockPanel und das Setzen auf „Füllung“ scheint auch nicht zu funktionieren, da die DockPanel nimmt nur den Platz ein, der von seinen Untersteuerungen benötigt wird.

Eine in der Größe veränderbare Benutzeroberfläche wäre ziemlich schrecklich, wenn man damit herumspielen müsste Height, Width, MinHeight, MinWidth usw.

Kannst du deine binden? Height Und Width Eigenschaften in die Rasterzelle einfügen, die Sie belegen?Oder gibt es eine andere Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Jede Steuerung ergibt sich aus Panel implementiert eine eindeutige Layoutlogik, die in ausgeführt wird Measure() Und Arrange():

  • Measure() bestimmt die Größe des Panels und jedes seiner untergeordneten Elemente
  • Arrange() bestimmt das Rechteck, in dem jedes Steuerelement gerendert wird

Das letzte Kind der DockPanel füllt den verbleibenden Raum.Sie können dieses Verhalten deaktivieren, indem Sie Folgendes festlegen LastChild Eigentum zu false.

Der StackPanel fragt jedes Kind nach seiner Wunschgröße und stapelt sie dann.Das Stack-Panel ruft auf Measure() auf jedes Kind, mit einer verfügbaren Größe von Infinity und verwendet dann die Wunschgröße des Kindes.

A Grid nimmt den gesamten verfügbaren Platz ein, stellt jedoch jedes untergeordnete Element auf die gewünschte Größe ein und zentriert es dann in der Zelle.

Sie können Ihre eigene Layoutlogik implementieren, indem Sie von ableiten Panel und dann überschreiben MeasureOverride() Und ArrangeOverride().

Sehen Dieser Artikel für ein einfaches Beispiel.

Andere Tipps

Es gibt auch einige Eigenschaften, die Sie festlegen können, um ein Steuerelement zu zwingen, seinen verfügbaren Platz auszufüllen, wenn dies andernfalls nicht der Fall wäre.Sie können zum Beispiel sagen:

HorizontalContentAlignment="Stretch"

...um zu erzwingen, dass der Inhalt eines Steuerelements horizontal gestreckt wird.Oder Sie können sagen:

HorizontalAlignment="Stretch"

...um zu erzwingen, dass sich das Steuerelement selbst horizontal ausdehnt, um sein übergeordnetes Element auszufüllen.

Nun, ich habe es selbst herausgefunden, direkt nach dem Posten, und das ist die peinlichste Art und Weise.:) :)

Es scheint, dass jedes Mitglied eines StackPanel einfach seine erforderliche Mindestgröße ausfüllt.

Im DockPanel hatte ich Dinge in der falschen Reihenfolge angedockt.Wenn die TextBox oder ListBox das einzige angedockte Element ohne Ausrichtung ist oder wenn sie das letzte hinzugefügte Element ist, füllen sie den verbleibenden Platz wie gewünscht aus.

Ich würde gerne eine elegantere Methode zur Handhabung dieses Problems sehen, aber es wird genügen.

Benutzen Sie die HorizontaleAusrichtung Und Vertikale Ausrichtung Layouteigenschaften.Sie steuern, wie ein Element den Platz innerhalb seines übergeordneten Elements nutzt, wenn mehr Platz verfügbar ist, als für das Element erforderlich ist.

Die Breite eines StackPanels ist beispielsweise so breit wie das breiteste Element, das es enthält.Alle schmaleren Elemente haben also etwas mehr Platz.Die Ausrichtungseigenschaften steuern, was das untergeordnete Element mit dem zusätzlichen Platz macht.

Der Standardwert für beide Eigenschaften ist „Stretch“, sodass das untergeordnete Element gestreckt wird, um den gesamten verfügbaren Platz auszufüllen.Zu den weiteren Optionen gehören „Links“, „Mitte“ und „Rechts“. HorizontaleAusrichtung und Oben, Mitte und Unten für Vertikale Ausrichtung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top