WPF DataGrid: Größe der Spalten
Habe ich ein System.Windows.Controls.DataGrid-Eigenschaft CanUserResizeColumns zugeordnet zu Wahren. Jetzt kann ich passen Sie die Breite der Spalten durch ziehen mit der Maus klicken der linken Maustaste wird zwischen 2 Spaltenköpfen.
Aber ich möchte auch in der Lage sein zu ändern die Breite der Spalten in jeder Zeile des dataGrid-Steuerelements, nicht nur in den Spaltenüberschriften. Ist es möglich?
- Diana, du solltest wirklich akzeptieren Antworten, sonst wird die community nicht motiviert werden, um Ihnen zu helfen.
- NÖ. Das ist zu kryptisch. :(.
- Ich denke, Sie meinte - Kann ich resize die Spaltenbreite durch ziehen der Zellen von Links\rechts Grenzen (wie das Verhalten der Spaltenüberschrift). Interessante Frage, es gibt kein solches Verhalten in Excel.
- Ich das falsch verstanden vorher. Offenbar gibt es eine Lösung. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
In das dataGrid können Sie eine
DataGridTemplate
Spalte alogn mit einemGridSplitter
um dies zu erreichen..Dann in deinem code hinter... dies tun...
Diese Weise einen GridSplitter auf individueller Ebene der Zellen können die Größe Ihre gesamte Spalte.
Wenn Sie mit MVVM dann die oben genannten event-handler, sollte in einem Angeschlossenen Verhalten
Folgenden auf die von WPF-seine ausgezeichnete Antwort, hier ist, wie zu erreichen das gleiche Ergebnis mit angebrachten Verhalten:
Alle Netz-Splitter erscheinen, wie man im DataGrid, ich angepasst die BorderThickness der DataGridCell auf 0, da sonst alle von den Netz-Splitter erschienen, als Striche (auf Windows 8 zumindest).
Den XAML-Code für das Fenster sieht wie folgt aus:
Den rest ist es ziemlich offensichtlich, aber der Vollständigkeit halber die Windows DataContext gesetzt wurde, um eine Instanz der folgenden ViewModel-code:
Hier ist eine alternative Lösung, die nicht belasten Ihre Daten raster Inhalt. Schicht eine Leinwand, auf der Oberseite des DataGrid, und in diesem Canvas-Bereich eine Linie gezogen werden kann, Links und rechts. Wenn gezogen, es aktualisiert die gewünschte Spaltenbreite.
XAML:
C# - code-behind:
Hinweis habe ich mich entschieden, die Linie durchsichtig, so dass der Letzte Benutzer nicht sehen. Das ist, weil ich schon auf die Daten zurückgreifen raster selbst zu zeigen, die vertikalen Linien zwischen den Spalten.
Sie können auch wählen Sie die Linienstärke auf was auch immer Sie suchen, um benutzerfreundlich sein, ohne das layout der grid-Zellen. Ich wählte 4, da es macht es einfach, um die Abholung, obwohl das datagrid stellt die vertikale Rasterlinie als 1-pixel-Breite.
Den Beispiel-code stammt aus meinem custom "PropertyGrid" - Steuerelement code-Basis, die hat nur zwei Spalten, also die hart-codierte Spalte 0. Für weitere Verallgemeinerung, würde ich diesen in eine angehängte Verhalten mit Unterstützung für so viele Spalten benötigt, oder sub-Klasse DataGrid selbst.
Im Vergleich zur vorherigen Lösung, dieser fügt nur ein paar WPF-Elemente unterstützen, das Verhalten, unabhängig davon, wie viele Daten-grid-Zeilen, die Sie haben, so könnte es effizienter und skalierbar auf große Datenmengen.