1

设置背景适用于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>

这个问题有什么解决办法吗?

4

2 回答 2

3

您应该添加magic字符串:

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

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

在这种情况下,IsEditing="True"默认分配颜色时 ( White),取自SystemColors. 但随后您需要显式设置主面板或Window.

或将此字符串设置<DataGrid.Resources>Background="White"

<DataGrid Background="White" ...>
    <DataGrid.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="Transparent" />
    </DataGrid.Resources>
        ... 
</DataGrid>
于 2014-02-17T12:03:29.550 回答
0

接受的答案很好,直到它引起副作用。就我而言,它导致编辑插入符号在编辑时不可见,可能是因为设置“神奇”系统颜色与自动设置插入符号颜色的逻辑相混淆。

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

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

另一个解决方案是自己制作,如此DataGridTemplateColumn所示。这使您可以完全控制您的列,而不是与内置想要做的任何事情作斗争。然而,这可能是太多的权力,因为它可能会迫使你处理你可能不想处理的细节。但是FWIW,这对我来说是有效的。DataGridTextColumn

于 2019-02-14T22:23:09.743 回答