2013-07-10 61 views
0

我有一個數據網格(WPF)與一些項目(ListViewCollection)。 我有一個問題。我選擇一行,然後按列排序。所選行更改它的背景。爲什麼在排序後datagrid選擇的行背景變化?

下面我有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

回答

1

應用該排序後,所選項目顏色已從HighlightBrushKey更改爲InactiveSelectionHighLightBrushKey。

得到你想要的可能是這個片段複製到您的用戶資源(或數據網格資源),並選擇要用於每個給定的州的顏色效果,最好的辦法...

<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> 
+0

感謝您的回答 –

+0

一個事後:我建議儘可能將這些資源設置在對象圖上。在我的代碼片段中,它們位於用戶控件上,但理想情況下應該位於應用程序級別。 –

+0

我很好奇爲什麼?我實際上讓它們在DataGrid.Resources中更低。謝謝你的方式! –

0

這是一個焦點問題......當您單擊列標題,該行不再具有焦點排序。

使用史努比,當行被點擊的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> 

缺點它,你單擊列標題後,你就會有,如果你想再次點擊一行通過上,下...等鍵在網格內導航。這可能會惹惱用戶。

+0

完成之前,沒有改變任何東西。即使我將HighlightBrush更改爲透明或其他。 –