如何在 WPF 中的 IsEdit=True 时更改 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>

这个问题有什么解决方案吗?

你应该添加magic字符串:

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

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

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

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

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

接受的答案很好,直到它引起副作用。就我而言,它导致编辑插入符号在编辑时不可见,可能是因为设置"魔术"系统颜色会弄乱自动设置插入符号颜色的逻辑。

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

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

另一种解决方案是 制作自己的DataGridTemplateColumn ,如下所示。这使您可以完全控制列,而不是与内置DataGridTextColumn想要执行的任何操作作斗争。但是,这可能功能太大,因为它可能会迫使您处理您可能不想处理的细节。但是 FWIW,这就是在我的情况下起作用的方法。

相关内容

  • 没有找到相关文章

最新更新