172 Stimmen

WPF: Grid mit Spalte/Zeilenabstand/Rand?

Ist es einfach möglich, in einem WPF-Raster einen Rand und/oder Abstand für Zeilen oder Spalten anzugeben?

Ich könnte natürlich zusätzliche Spalten hinzufügen, um Dinge zu trennen, aber das scheint eine Aufgabe für Padding/Margins zu sein (es wird das XAML viel einfacher machen). Hat jemand vom Standard-Raster abgeleitet, um diese Funktionalität hinzuzufügen?

4 Stimmen

Ein nützliches Beispiel findest du hier: codeproject.com/Articles/107468/WPF-Padded-Grid

7 Stimmen

Ziemlich verwirrt, dass dies nicht Teil der Grundfunktionen des Grids ist...

2 Stimmen

Bis heute, wie von 10 Jahren Antworten gezeigt, ist die Wahrheit, dass es nicht einfach möglich ist, und das Beste, was getan werden kann (um zusätzliche fehleranfällige Arbeit jedes Mal zu vermeiden, wenn eine Zelle verwendet wird), ist es, Grid abzuleiten (wie bereits von @peter70 vorgeschlagen), um die entsprechende Zell-Padding-Abhängigkeitseigenschaft hinzuzufügen, die die Margin-Eigenschaft des Zellen-Kindes steuert. Dies ist keine lange Aufgabe, und dann haben Sie eine wiederverwendbare Steuerung. Nebenbemerkung... Grid ist wirklich eine schlecht gestaltete Steuerung.

0voto

Thomas Levesque Punkte 277723

Sie könnten Ihre eigene GridWithMargin-Klasse schreiben, die von Grid abgeleitet ist, und die Methode ArrangeOverride überschreiben, um die Ränder anzuwenden

78 Stimmen

Ich verstehe nicht, warum Leute dir Daumen nach oben geben, denn es ist bei Weitem nicht so einfach, wie du hier denkst/beschreibst. Versuche es einfach mal 30 Minuten lang und du wirst schnell merken, dass deine Antwort nicht anwendbar ist. Denke auch über Zeilen- und Spaltenüberlappung nach.

0voto

ed13 Punkte 331

Auch wenn Sie keinen Rand oder Abstand zu einem Raster hinzufügen können, könnten Sie etwas wie einen Frame (oder ähnlichen Container) verwenden, den Sie darauf anwenden können.

Auf diese Weise (wenn Sie z. B. die Steuerung durch einen Klick auf eine Schaltfläche anzeigen oder ausblenden), müssen Sie keinen Rand zu jeder Steuerung hinzufügen, die damit interagieren kann.

Denken Sie daran, die Gruppen von Steuerungen in Einheiten zu isolieren und dann Stil auf diese Einheiten anzuwenden.

0voto

Paul Baxter Punkte 964

Wie bereits erwähnt, erstellen Sie eine GridWithMargins-Klasse. Hier ist mein funktionierendes Codebeispiel

public class GridWithMargins : Grid
{
    public Thickness RowMargin { get; set; } = new Thickness(10, 10, 10, 10);
    protected override Size ArrangeOverride(Size arrangeSize)
    {
        var basesize = base.ArrangeOverride(arrangeSize);

        foreach (UIElement child in InternalChildren)
        {
            var pos = GetPosition(child);
            pos.X += RowMargin.Left;
            pos.Y += RowMargin.Top;

            var actual = child.RenderSize;
            actual.Width -= (RowMargin.Left + RowMargin.Right);
            actual.Height -= (RowMargin.Top + RowMargin.Bottom);
            var rec = new Rect(pos, actual);
            child.Arrange(rec);
        }
        return arrangeSize;
    }

    private Point GetPosition(Visual element)
    {
        var posTransForm = element.TransformToAncestor(this);
        var areaTransForm = posTransForm.Transform(new Point(0, 0));
        return areaTransForm;
    }
}

Verwendung:

1 Stimmen

Wirft System.ArgumentException: 'Die Breite muss nicht negativ sein.' actual.Width -= Math.Min(actual.Width, RowMargin.Left + RowMargin.Right); actual.Height -= Math.Min(actual.Height, RowMargin.Top + RowMargin.Bottom);

0 Stimmen

Mit Jamies Reparatur läuft es, macht aber immer noch nicht das, was es sollte. Wenn Höhe der Zeile und Breite der Spalte auf Auto gesetzt sind, macht es etwas Falsches auf eine andere Weise.

0voto

Zen Of Kursat Punkte 2473

In uwp (Windows10FallCreatorsUpdate Version und höher)

1 Stimmen

Dies gilt auch für Xamarin.Forms.

14 Stimmen

UWP != WPF... Warum müssen Kommentare 15 Zeichen lang sein (rhetorische Frage).

1 Stimmen

14 Zeichen hier.

-9voto

rollsch Punkte 2141

Manchmal ist der einfache Weg der beste. Fügen Sie einfach Leerzeichen zu Ihren Zeichenfolgen hinzu. Wenn es nur ein paar Textfelder usw. sind, ist dies bei weitem die einfachste Methode.

Sie können auch einfach leere Spalten/Zeilen mit fester Größe einfügen. Extrem einfach und Sie können es leicht ändern.

0 Stimmen

Wahrscheinlich, weil es keine sehr gute Methode ist. Die Verwendung von Leerzeichen mag der "einfache Weg" sein, aber es ist tatsächlich eher ein Hack. Es ist nicht präzise, es könnte (und wahrscheinlich wird) sich unterschiedlich und unzuverlässig auf Monitoren mit unterschiedlicher Skalierung darstellen und Sie haben keine Kontrolle über die genaue Menge an Platz, die Sie schaffen. Das Einfügen von leeren Spalten/Zeilen wird Ihr Raster durcheinander bringen...

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