3

有没有办法在DataGrid失去焦点时保留一行的原始背景颜色?

我知道InactiveSelectionHighlightBrushKey可以设置特定的颜色,但是可以说以前的背景颜色可以是红色或绿色,我想InactiveSelectionHighlightBrushKey 成为该行的原始颜色是什么?

添加:

我在 viewmodel 中有 IsZero 属性,它是真/假,以及下面的 XAML:

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

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

4

3 回答 3

6

如果我理解正确,您可以使用此页面中的答案:DataGrid's selected row color when inactive to set the InactiveSelectionHighlightBrushKey to be Transparent

于 2012-11-28T19:18:33.863 回答
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>
于 2013-04-09T13:37:23.577 回答
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>

于 2013-12-17T09:27:56.047 回答