重置datagrid的非活动选择背景颜色

时间:2012-11-28 10:50:29

标签: wpf xaml datagrid

当焦点丢失时,有没有办法在DataGrid中保留行的原始背景颜色?

我知道InactiveSelectionHighlightBrushKey可以设置一个特定的颜色,但我们可以说以前的背景颜色可能是红色或绿色,我希望InactiveSelectionHighlightBrushKey与该行的原始颜色无关?< / p>

添加了:

我在viewmodel中有IsZero属性,它是true / false,下面是 XAML:

          <DataGrid.RowStyle>
                <Style TargetType="{x:Type DataGridRow}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsZero}" Value="True">
                            <Setter Property="Background" Value="Green" />
                        </DataTrigger>

其他行具有其他绑定以设置不同的颜色,但选择它并取消选择它会产生蓝色和灰色。我可以设置颜色,但不确定将它设置为“当前背景颜色”的优雅方式。

3 个答案:

答案 0 :(得分:5)

如果我理解正确,您可以使用此页面中的答案:DataGrid's selected row color when inactiveInactiveSelectionHighlightBrushKey设置为Transparent

答案 1 :(得分:1)

使用InactiveSelectionHighlightBrushKey不是一个好的解决方案(至少对我而言),因为此属性已冻结且无法更改。 请参阅:http://msdn.microsoft.com/en-us/library/system.windows.systemcolors.inactiveselectionhighlightbrushkey.aspx

尝试修改它会导致运行时错误。

在我的情况下使用以下工作:

<DataGrid.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>           
</DataGrid.Resources>

答案 2 :(得分:0)

对于WPF 4.0,我发现以下效果最好,因为在其他解决方案中,当我进入另一个数据网格时,行仍然变为灰色。

<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
            <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
        </Trigger>          
    </Style.Triggers>
</Style>