una net filas fila encabezado custom como columna colores color cambiar wpf wpfdatagrid

wpf - net - datagridview color row



Color de fila seleccionado de DataGrid cuando está inactivo (10)

¿Cómo puedo diseñar WPF DataGrid para cambiar el color de la fila seleccionada cuando DataGrid pierde su foco?


Agregué esto a mi ResourceDictionary para que se aplique a todas las cuadrículas de datos en mi programa.

<Style TargetType="DataGrid"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="LightGray"/> </Style.Resources> </Style>


Debe definir la sección "DataGrid.CellStyle" dentro de su DataGrid de la siguiente manera:

<DataGrid> <DataGrid.CellStyle> <Style TargetType="DataGridCell"> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="LightBlue"/> </Trigger> </Style.Triggers> </Style> </DataGrid.CellStyle> </DataGrid>


Después de años de búsqueda, encontré una forma sorprendentemente simple de hacer esto que es más limpia que el enfoque Got / LostFocus publicado anteriormente:

<DataGrid.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="DarkGray"/> </DataGrid.Resources>

Esto simplemente establece el color de fondo inactivo en DarkGray, dejando el color de fondo activo en el valor predeterminado, pero también puede cambiar eso usando SystemColors.HighlightBrushKey también, por supuesto.

La clave de recursos en primer plano para las selecciones inactivas es SystemColors.InactiveSelectionHighlightTextBrushKey.


Encuentre una respuesta por mi cuenta.

Agregue a los recursos de DataGrid el pincel, que puede cambiar su propiedad ''Color'' del código subyacente, y haga referencia a HighlightBrushKey para ello:

<DataGrid.Resources> <SolidColorBrush x:Key="SelectionColorKey" Color="DarkGray"/> <Style TargetType="DataGridRow"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={StaticResource SelectionColorKey}, Path=Color}"/> </Style.Resources> </Style> </DataGrid.Resources>

A continuación, agregue controladores de eventos DataGrids para cambiar el color manualmente:

private void DataGrid1_LostFocus(object sender, RoutedEventArgs e) { ((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = Colors.DarkGray; } private void DataGrid1_GotFocus(object sender, RoutedEventArgs e) { ((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = SystemColors.HighlightColor; } private void DataGrid1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { ((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = Colors.DarkGray; }


Hazlo asi:

<DataGrid ...> <DataGrid.Resources> <Style TargetType="DataGridRow"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/> </Style.Resources> </Style> </DataGrid.Resources> ...


Ninguna de estas respuestas me dio exactamente lo que estaba buscando. Los mejores calificados por Steve Streeting cambiaron otras secciones de la cuadrícula de datos que no deseaba cambiar, y otras respuestas no proporcionaban el cambio de color inactivo , pero estaban dirigidas solo a la fila. Así que aquí hay una mezcla de sus respuestas que cambia el color inactivo , solo en las filas y no en otros lugares de la cuadrícula.

<DataGrid.Resources> <Style TargetType="DataGridRow"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="DarkGray"/> </Style.Resources> </Style> </DataGrid.Resources>


Para .Net Framework 4.0 (o si no desea utilizar InactiveSelection ... teclas del pincel): Cree una plantilla de estilo / control DataGridRow y agregue estos desencadenantes:

<ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter Property="Background" Value="{DynamicResource SelectionBrush}" /> </Trigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=IsKeyboardFocusWithin}" Value="False" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Background" Value="{DynamicResource InactiveSelectionBrush}" /> </MultiDataTrigger.Setters> </MultiDataTrigger> </ControlTemplate.Triggers>


Solución completa que funciona para 4.0. Tenga en cuenta que esto en el CellStyle.

<DataGrid.CellStyle> <!--Override Highlighting so that its easy to see what is selected even when the control is not focused--> <Style TargetType="{x:Type DataGridCell}"> <Style.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> </Trigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=IsKeyboardFocusWithin}" Value="False" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> </MultiDataTrigger.Setters> </MultiDataTrigger> </Style.Triggers> </Style> </DataGrid.CellStyle>



RESPUESTA TARDÍA:

Esto funciona en .Net 4.0 , y no es necesario codificar el color:

<Style TargetType="DataGridRow"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}" /> <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="{x:Static SystemColors.HighlightTextColor}"/> </Style.Resources> </Style>