una - color datagridview c#
¿Cómo puedo establecer el color de una fila seleccionada en DataGrid? (7)
Esto parece obvio, pero no puedo ver cómo hacerlo.
El color de fondo predeterminado de una fila seleccionada en DataGrid es tan oscuro que no puedo leerlo. ¿Hay alguna forma de anularlo?
Intenté esto (modificado desde el enlace de Neverminds)
<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>
Pero aún nada ...
Algunos de los motivos por los que experimenté que el evento seleccionado de la fila no funcionaba
- El estilo está configurado para DataGridCell
- Uso de columnas Templated
- Trigger está configurado en DataGridRow
Esto es lo que me ayudó. Establecer el estilo para DataGridCell
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
Y como estaba usando una columna de plantilla con una etiqueta dentro, vinculé la propiedad de primer plano al primer plano del contenedor mediante el enlace de RelativeSource:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding CategoryName,
Mode=TwoWay,
UpdateSourceTrigger=LostFocus}"
Foreground="{Binding Foreground,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorLevel=1,
AncestorType={x:Type DataGridCell}}}"
Width="150"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Como extensión de la respuesta de @Seb Kade, puede controlar completamente los colores de las filas seleccionadas y no seleccionadas utilizando el siguiente Style
:
<Style TargetType="{x:Type DataGridRow}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
</Style.Resources>
</Style>
Por supuesto, puede ingresar los colores que prefiera. Este Style
también funcionará para otros elementos de la colección como ListBoxItem
s (si reemplaza TargetType="{x:Type DataGridRow}"
con TargetType="{x:Type ListBoxItem}"
por ejemplo).
El desencadenante IsSelected predeterminado cambia 3 propiedades, Fondo, Primer plano y BorderBrush. Si desea cambiar el borde y el fondo, simplemente incluya esto en su disparador de estilo.
<Style TargetType="{x:Type dg:DataGridCell}">
<Style.Triggers>
<Trigger Property="dg:DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="#CCDAFF" />
<Setter Property="BorderBrush" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
Intenté con ControlBrushKey pero no funcionó para las filas no seleccionadas. El fondo de la fila no seleccionada todavía era blanco. Pero me las he arreglado para descubrir que tengo que anular el estilo de fila.
<DataGrid x:Name="pbSelectionDataGrid" Height="201" Margin="10,0"
FontSize="20" SelectionMode="Single" FontWeight="Bold">
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFFDD47C"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FFA6E09C"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Violet"/>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="LightBlue" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
La solución anterior dejó un borde azul alrededor de cada celda en mi caso.
Esta es la solución que funcionó para mí. Es muy simple, simplemente agregue esto a su DataGrid
. Puede cambiarlo de un SolidColorBrush
a cualquier otro pincel, como un degradado lineal.
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="#FF0000"/>
</DataGrid.Resources>
Lo tengo. Agregue lo siguiente dentro de la sección DataGrid.Resources:
<DataGrid.Resources>
<Style TargetType="{x:Type dg:DataGridCell}">
<Style.Triggers>
<Trigger Property="dg:DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="#CCDAFF" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
Tuve este problema y casi me arranqué el pelo, y no pude encontrar la respuesta adecuada en la red. Estaba tratando de controlar el color de fondo de la fila seleccionada en WPF DataGrid. Simplemente no lo haría. En mi caso, la razón fue que también tenía un CellStyle en mi cuadrícula de datos, y CellStyle anuló el RowStyle I que estaba configurando. Curiosamente, porque CellStyle ni siquiera estaba configurando el color de fondo, que en su lugar fue establecido por las propiedades RowBackground y AlternateRowBackground. Sin embargo, intentar establecer el color de fondo de la fila seleccionada no funcionó en absoluto cuando hice esto:
<DataGrid ... >
<DataGrid.RowBackground>
...
</DataGrid.RowBackground>
<DataGrid.AlternatingRowBackground>
...
</DataGrid.AlternatingRowBackground>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Pink"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="{Binding MyProperty}" />
</Style>
</DataGrid.CellStyle>
y funcionó cuando moví el estilo deseado para la fila seleccionada fuera del estilo de fila y en el estilo de celda, así:
<DataGrid ... >
<DataGrid.RowBackground>
...
</DataGrid.RowBackground>
<DataGrid.AlternatingRowBackground>
...
</DataGrid.AlternatingRowBackground>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="{Binding MyProperty}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Pink"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
Solo publique esto en caso de que alguien tenga el mismo problema.