Domyślny kolor tła wybranego wiersza w DataGrid jest tak ciemny, że nie mogę go odczytać. Czy w ogóle można to zastąpić?
Próbowałem tego
<dg:DataGrid.RowStyle>
<Style TargetType="{x:Type dg:DataGridRow}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="Gainsboro" />
</Trigger>
</Style.Triggers>
</Style>
</dg:DataGrid.RowStyle>
Ale nadal nic ...
Odpowiedzi:
Powyższe rozwiązanie pozostawiło niebieskie obramowanie wokół każdej komórki w moim przypadku.
To rozwiązanie, które mi się sprawdziło. To bardzo proste, po prostu dodaj to do swojego
DataGrid
. Możesz go zmienić z aSolidColorBrush
na dowolny inny pędzel, taki jak gradient liniowy.źródło
<DataGrid>ItemsSource="{Binding Path=MySelector}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
. Wiersz jest tylko jasnoszary. Czy istnieje również SystemColors? ´SystemColors.ControlBrushKey
.Rozumiem. Dodaj następujące elementy w sekcji DataGrid.Resources:
źródło
BorderBrush
pozostaje niebieski, jeśli kogoś denerwuje, po prostu dodaj kolejnySetter
element, który ustawiBorderBrush
właściwość zależności na ten sam kolor (wartość) co onaBackground
sama.Jako rozszerzenie odpowiedzi @Seb Kade, możesz w pełni kontrolować kolory zaznaczonych i niezaznaczonych wierszy za pomocą
Style
:Możesz oczywiście wprowadzić dowolne kolory. To
Style
będzie również działać na innych przedmiotów, takich jak zbiórkiListBoxItem
s (jeśli zastąpiTargetType="{x:Type DataGridRow}"
sięTargetType="{x:Type ListBoxItem}"
na przykład).źródło
Color
właściwość trzeciegoSolidColorbrush
w moim przykładzie na dowolny kolor. Korzystanie z tej deklaracji jest rzeczywiście ustawienie koloruSolidColorbrush
, że wSystemColors.HighlightTextBrushKey
zastosowaniach. Uważaj jednak, aby nie ustawićForeground
koloru w innymStyle
miejscu, ponieważ może to zastąpić ustawieniaResources
opisane powyżej.SystemColors.InactiveSelectionHighlightBrushKey
lub wiersz zostanie podświetlony, gdy siatka straci ostrośćMiałem ten problem i prawie wyrwałem sobie włosy, a nie mogłem znaleźć odpowiedniej odpowiedzi w sieci. Próbowałem kontrolować kolor tła wybranego wiersza w WPF DataGrid. Po prostu by tego nie zrobił. W moim przypadku powodem było to, że miałem również CellStyle w moim datagridzie, a CellStyle zastąpił ustawienie RowStyle. Co ciekawe, ponieważ CellStyle nie ustawiał nawet koloru tła, który zamiast tego był ustawiany przez właściwości RowBackground i AlternateRowBackground. Niemniej jednak próba ustawienia koloru tła wybranego wiersza w ogóle nie działała, gdy zrobiłem to:
i zadziałało, gdy przeniosłem żądany styl dla wybranego wiersza ze stylu wiersza do stylu komórki, na przykład:
Po prostu opublikuj to na wypadek, gdyby ktoś miał ten sam problem.
źródło
Domyślny wyzwalacz IsSelected zmienia 3 właściwości, Background, Foreground i BorderBrush. Jeśli chcesz zmienić obramowanie, a także tło, po prostu uwzględnij to w wyzwalaczu stylu.
źródło
Niektóre z powodów, dla których zauważyłem, że wiersz wybrany zdarzenie nie działa
To mi pomogło. Ustawianie stylu dla DataGridCell
A ponieważ używałem kolumny szablonu z etykietą w środku, związałem właściwość Foreground z kontenerem Foreground za pomocą powiązania RelativeSource:
źródło
Próbowałem ControlBrushKey, ale nie działało to dla niezaznaczonych wierszy. Tło niewybranego wiersza było nadal białe. Ale udało mi się dowiedzieć, że muszę zmienić styl wiosłowania.
źródło
Większą część dnia spędziłem na majstrowaniu przy tym problemie. Okazało się, że właściwość RowBackground w DataGrid - którą ustawiłem - przesłaniała wszystkie próby jej zmiany. Jak tylko go usunąłem, wszystko działało. (Nawiasem mówiąc, to samo dotyczy zestawu Foreground w DataGridTextColumn).
źródło