设置背景适用于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>
这个问题有什么解决方案吗?
你应该添加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>
接受的答案是很好的,直到它引起副作用。在我的情况下,它导致编辑插入符号在编辑时不可见,可能是因为设置“魔法”系统颜色正在弄乱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,这就是我的情况。