我有一些带有一些项目的数据网格(WPF)(ListViewCollection)。 我有一个问题。我选择了一行,之后我按列排序。选定的行会更改它的背景。
下面我有datagrid代码。和之前/之后的2个屏幕图片。你可以看到蓝色变成灰色
<DataGrid Background="White" IsSynchronizedWithCurrentItem="{x:Null}" EnableRowVirtualization="False" AutoGenerateColumns="False" CanUserSortColumns="True" ItemsSource="{Binding ConsoleLines}"
GridLinesVisibility="None" IsReadOnly="True" RowHeaderWidth="0" Style="{StaticResource DataGridStyle}" Margin="5">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserSort="True" Header="{Binding TimeHeader, Source={StaticResource ResLoc}}" SortMemberPath="Time" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Time}" TextWrapping="Wrap" Foreground="{StaticResource DarkBackgroundBrush}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn CanUserSort="True" Header="{Binding MessageHeader, Source={StaticResource ResLoc}}" SortMemberPath="Message" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Message}" TextWrapping="Wrap" Foreground="{StaticResource DarkBackgroundBrush}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn CanUserSort="True" Header="{Binding CategoryHeader, Source={StaticResource ResLoc}}" SortMemberPath="Category" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Category}" TextWrapping="Wrap" Foreground="{StaticResource DarkBackgroundBrush}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:1)
应用排序后,所选项目颜色从HighlightBrushKey更改为InactiveSelectionHighLightBrushKey。
获得所需效果的最佳方法可能是将此代码段复制到用户资源(或DataGrid资源)中,并为每个给定状态选择所需的颜色...
<UserControl.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="DeepSkyBlue"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="PowderBlue"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HotTrackBrushKey}" Color="CadetBlue"/>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Plum"/>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Black"/>
</UserControl.Resources>
答案 1 :(得分:0)
这是一个焦点问题......当您单击列标题以对行进行排序时,不再具有焦点。
使用Snoop,当点击一行时Keyboard.FocusedElement
为DataGridCell
但是当点击列标题时,它会更改为HostWindow
(至少在我的应用上)。
添加以下内容,在这两种情况下,行的颜色都相同:
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridRow}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="DodgerBlue" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="DodgerBlue" />
</Style.Resources>
</Style>
</DataGrid.Resources>
在您单击列标题后,如果要通过向上,向下...等键在网格中导航,则必须再次单击一行。这可能会惹恼用户。