A cor de fundo padrão de uma linha selecionada no DataGrid é tão escura que não consigo lê-la. Existe alguma maneira de substituí-lo?
Tentei isso
<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>
Mas ainda nada ...
Respostas:
A solução acima deixou uma borda azul ao redor de cada célula no meu caso.
Esta é a solução que funcionou para mim. É muito simples, basta adicionar isso ao seu
DataGrid
. Você pode alterá-lo de aSolidColorBrush
para qualquer outro pincel, como gradiente linear.fonte
<DataGrid>ItemsSource="{Binding Path=MySelector}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
a linha será apenas LightGrey. Existe também um SystemColors? ´SystemColors.ControlBrushKey
.Entendi. Adicione o seguinte na seção DataGrid.Resources:
fonte
BorderBrush
azul permanece, se isso incomoda alguém, basta adicionar outroSetter
elemento, que define aBorderBrush
propriedade de dependência com a mesma cor (valor) daBackground
mesma.Como extensão da resposta de @Seb Kade, você pode controlar totalmente as cores das linhas selecionadas e não selecionadas usando o seguinte
Style
:Obviamente, você pode inserir as cores que preferir. Isso
Style
também funcionará para outros itens de coleção, comoListBoxItem
s (se você substituirTargetType="{x:Type DataGridRow}"
por,TargetType="{x:Type ListBoxItem}"
por exemplo).fonte
Color
propriedade do terceiroSolidColorbrush
no meu exemplo para a cor que você preferir. O uso desta declaração está na verdade definindo a cor usadaSolidColorbrush
pelosSystemColors.HighlightTextBrushKey
usuários. Tenha cuidado, porém, para não definir aForeground
cor em outro local,Style
pois isso pode substituir as configuraçõesResources
acima.SystemColors.InactiveSelectionHighlightBrushKey
, ou a linha vai destacar quando a grade perde o focoEu tive esse problema e quase arranquei meu cabelo, e não consegui encontrar a resposta apropriada na rede. Eu estava tentando controlar a cor de fundo da linha selecionada em um WPF DataGrid. Simplesmente não faria isso. No meu caso, o motivo foi que eu também tinha um CellStyle no meu datagrid e o CellStyle substituiu o RowStyle que eu estava definindo. Curiosamente, porque o CellStyle nem estava definindo a cor do plano de fundo, que era configurada pelas propriedades RowBackground e AlternateRowBackground. No entanto, tentar definir a cor de fundo da linha selecionada não funcionou quando fiz isso:
e funcionou quando mudei o estilo desejado para a linha selecionada fora do estilo de linha e para o estilo de célula, da seguinte maneira:
Basta postar isso no caso de alguém ter o mesmo problema.
fonte
O gatilho IsSelected padrão altera 3 propriedades, Background, Foreground e BorderBrush. Se você quiser alterar a borda e o plano de fundo, inclua isso no seu gatilho de estilo.
fonte
Alguns dos motivos pelos quais eu experimentei o evento selecionado de linha não estão funcionando
Foi isso que me ajudou. Definindo o estilo para DataGridCell
E como eu estava usando uma coluna de modelo com um rótulo dentro, vinculei a propriedade Foreground ao contêiner Foreground usando a ligação RelativeSource:
fonte
Eu tentei ControlBrushKey, mas não funcionou para linhas não selecionadas. O plano de fundo da linha não selecionada ainda estava branco. Mas eu consegui descobrir que tenho que substituir o estilo de linha.
fonte
Passei a maior parte de um dia brincando com esse problema. A propriedade RowBackground no DataGrid - que eu havia definido - acabou substituindo todas as tentativas de alterá-lo. Assim que eu apaguei, tudo funcionou. (O mesmo vale para o primeiro plano definido em DataGridTextColumn, a propósito).
fonte