为什么数据网格在排序后选择了行背景更改?

时间:2013-07-10 12:54:08

标签: .net wpf listview datagrid background

我有一些带有一些项目的数据网格(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>

Before

After

2 个答案:

答案 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.FocusedElementDataGridCell但是当点击列标题时,它会更改为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>

在您单击列标题后,如果要通过向上,向下...等键在网格中导航,则必须再次单击一行。这可能会惹恼用户。