Entfernen Sie die linke Rahmenrasterlinie für WPF DataGrid-Headerspalten, damit sie mit den Datengitterlinien übereinstimmen

8

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?

    
Michael Goldshteyn 06.03.2011, 21:46
quelle

3 Antworten

5

Update: Zwei Lösungen wurden hinzugefügt, beide ergeben ein Ergebnis wie

Lösung 1

  • SeparatorVisibility="Collapsed" für DataGridHeaderBorder festlegen
  • Fügen Sie das linke und das rechte Trennzeichen als Border s
  • hinzu
  • Handle Hover , Gepresst und Sortiert in Triggern
  • Fügen Sie einen Verweis auf PresentationFramework.Aero
  • hinzu

Xaml

%Vor%

Lösung 2

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

    
Fredrik Hedblad 07.03.2011, 23:21
quelle
18

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:)

    
umesh desai 19.11.2012 00:37
quelle
-1

Setzen Sie einfach links thichkness in HeaderStyle auf 0:

%Vor%     
Kranach 12.06.2014 17:17
quelle

Tags und Links