如何改变DataGridCell的背景时IsEditing在WPF = TRUE(How to ch

2019-10-19 09:21发布

设置背景工作正常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>

是否有此问题的任何解决方案?

Answer 1:

您应该添加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>


Answer 2:

接受的答案是伟大的,直到它会导致副作用。 对我来说,这是造成编辑时,可能是因为设置了“魔”系统颜色与搞乱编辑插入符号是不可见的,可以自动设置插入颜色逻辑 。

更好的解决方案是简单地覆盖,网格使用时,它在编辑模式(风格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,这是什么在我的案件的工作。



文章来源: How to change background of DataGridCell when IsEditing=True in WPF