Die Rahmenstile für Headerzellen und Datenzellen in einem WPF 4.0 DataGrid sind inkonsistent. Headerzellen haben einen Rahmen, der eine linke vertikale Rahmenlinie und eine rechte vertikale Rahmenlinie um den Kopftext enthält. Data-Grid-Textspalten-Datenzeilen sind so gestaltet, dass nur die rechte Seite eine vertikale Rahmenlinie aufweist. Das folgende Beispielbild veranschaulicht dies (beachten Sie, dass die Gitterlinienfarbe in # D0D0D0 geändert wurde):
Hier ist das gleiche Bild vergrößert, um die Inkonsistenz zu zeigen:
Wie ändern Sie die Rasterkopfzeilen (möglicherweise über Vorlagen oder Stile), um den linken Rand zu entfernen, sodass die vertikalen Rahmenlinien der Kopfzeile mit den Datenrandlinien ausgerichtet sind?
Update: Zwei Lösungen wurden hinzugefügt, beide ergeben ein Ergebnis wie
SeparatorVisibility="Collapsed"
für DataGridHeaderBorder
festlegen
Border
s Xaml
%Vor% Die Trennzeichen für DataGridColumnHeader
werden in der RenderTheme
-Methode in DataGridHeaderBorder
gezeichnet. Diese Klasse ist eigentlich ein Alles-oder-Nichts-Deal, da das Ändern einer Eigenschaft den gesamten Stil deaktiviert (kein Rahmen, keine Sortierpfeile usw.). Es ist auch versiegelt, so dass wir daraus nicht ableiten können. Wir können jedoch die gesamte Klasse kopieren und stattdessen% c_de% s diese Klasse verwenden.
Der Teil, der die Trennzeichen zeichnet, sieht so aus
%Vor% Von hier aus könnten wir einfach das linke Trennzeichen entfernen und wir würden eine Trennbreite von 1 anstelle von 2 erhalten, aber dann würden wir die falsche Färbung für die linke Seite bekommen, wenn Schweben , Drücken oder Sortieren einer Spalte. Um dies zu umgehen, können wir das linke Trennzeichen um 1 nach links verschieben und den ZIndex so ändern, dass Schwebend usw. einen höheren ZIndex erhält als normale Farben. Damit dies funktioniert, müssen wir auch ZIndex von DataGridColumnHeader
an ZIndex von DataGridColumnHeader
binden.
Wir können es so benutzen
%Vor%MyDataGridHeaderBorder war zu groß, um ihn zu posten, also habe ich ihn hier hochgeladen: MyDataGridHeaderBorder.cs
Um dies zu vermeiden, fügen Sie einfach die Eigenschafteneinstellung im DataGridColumnHeader-Stil hinzu.
%Vor%Das Problem in diesem Datagrid ist, dass die Grenzzeichnung innerhalb der Headerzelle auf der linken Seite stattfindet. Dies verursacht die zusätzliche Auskleidung wie im Bild oben gezeigt. Wenn Sie auch die Brendendicke des Datagrids setzen, erscheint das Problem auch auf der oberen Seite der Zelle.
Ich hoffe, dass diese Einstellungen das Problem lösen, wenn die Dicke "1" ist. Für andere Dicken weißt du jetzt was du einstellen musst:)
Tags und Links wpf wpfdatagrid wpf-controls