如何在WPF中IsEditing = True时更改DataGridCell的背景

时间:2014-02-17 11:19:23

标签: c# wpf datagrid styles datagridcell

设置背景适用于DataGridCheckBoxColumn但不适用于DataGridTextColumn。我把它设置为资源中的单元格:

<Style TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="#ffff00" />
        </Trigger>

        <Trigger Property="IsEditing" Value="True">
            <Setter Property="BorderThickness" Value="1" />
            <Setter Property="BorderBrush" Value="#00ff00" />
            <Setter Property="Background" Value="#00ff00" />
        </Trigger>
    </Style.Triggers>
</Style>

这个问题有解决方法吗?

2 个答案:

答案 0 :(得分:3)

您应该添加magic字符串:

<SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="Transparent" />

在您的资源中,例如<Window.Resources>

在这种情况下,默认情况下分配IsEditing="True"颜色( White ),这取自SystemColors。但是,您需要明确设置主面板或Window

的颜色

或者使用<DataGrid.Resources>在<{1}}中设置此字符串:

Background="White"

答案 1 :(得分:0)

在引起副作用之前,公认的答案是好的。以我为例,这可能导致编辑插入符号在编辑时不可见,可能是因为设置“魔术”系统颜色与logic that sets the caret color automatically混为一谈。

更好的解决方案是简单地覆盖网格处于编辑模式时使用的样式(DataGridTextColumn.EditingElementStyle),如下所示:

<DataGrid>
    <DataGrid.Columns>
        <DataGridTextColumn>
            <DataGridTextColumn.EditingElementStyle>
                <Style TargetType="TextBox">
                    <Setter Property="Background" Value="#00ff00"/>
                </Style>
            </DataGridTextColumn.EditingElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

另一种解决方案是制作自己的DataGridTemplateColumn,如图here所示。这使您可以完全控制自己的列,而不必与内置DataGridTextColumn想要做的事情作斗争。但是,这可能功能太多,因为它可能会迫使您处理您可能不想处理的细节。但是FWIW,这就是我的情况。