首页 > 解决方案 > 我想根据数据库中的颜色为特定单元格动态设置 DataGridCell 背景颜色或样式。我该怎么做呢?

问题描述

我有一个 DataTable,其中包含 ARGB 中的人名和颜色。

我已经能够从颜色单独创建画笔和/或样式,但是在 UWP 项目中绑定 WindowsToolkit DataGrid 的 DataGridTextColumn 的 cellStyle 时遇到问题。

在此处输入图像描述

数据库作为 ItemsSource 绑定到 DataGrid 并正确显示,但无法将颜色/画笔/样式传递给 cellStyle。

我如何实现这一目标?

    <Custom:DataGrid x:Name="DataGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" HorizontalAlignment="Left" FrozenColumnCount="1" Margin="0,0,0,0" Width="1480" CanUserSortColumns="True" Grid.Row="1">
        <Custom:DataGrid.Columns>
            <Custom:DataGridTextColumn Header="ProvNum" Binding="{Binding [0]}" Tag="ProvNum" Visibility="Collapsed" />
            <Custom:DataGridTextColumn Header="ProvStyle" Binding="{Binding [1]}" Tag="ProvStyle" />
            <Custom:DataGridTextColumn Header="Provider" Binding="{Binding [2]}" Tag="Provider" />
            <Custom:DataGridTextColumn Header="Production" Binding="{Binding [3], Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:C1}'}" Tag="Production" />
            <Custom:DataGridTextColumn Header="Adjustments" Binding="{Binding [4], Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:C1}'}" Tag="Adjustments" />
            <Custom:DataGridTextColumn Header="Writeoffs" Binding="{Binding [5], Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:C1}'}" Tag="Writeoffs" />
            <Custom:DataGridTextColumn Header="Income" Binding="{Binding [6], Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:C1}'}" Tag="Income" />
            <Custom:DataGridTextColumn Header="Net Production" Binding="{Binding [7], Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:C1}'}" CellStyle="{StaticResource ProductionColumn}" Tag="NetProduction" />
        </Custom:DataGrid.Columns>
    </Custom:DataGrid>

标签: c#uwp

解决方案


您是否使用社区工具包中的 DataGrid?如果是这样,DataGrid 似乎没有直接的方法来执行此操作。但是您可以使用 DataGridTemplateColumn 类型,它使您可以通过指定用于显示值的单元格模板来创建自己的列类型。设置 CellTemplate 属性来指定单元格的内容,可以将背景与下面的 Border 绑定。

<controls:DataGrid.Columns>
    //just one column
    <controls:DataGridTemplateColumn Header="Name">
        <controls:DataGridTemplateColumn.CellTemplate>
            <DataTemplate x:DataType="local:Person">
                <Border Background="{x:Bind CellForColorInDataTable}">
                    <TextBlock Text="{x:Bind Name}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </DataTemplate>
        </controls:DataGridTemplateColumn.CellTemplate>
    </controls:DataGridTemplateColumn>
    // another colunm
    <controls:DataGridTextColumn Header="ProvNum" ....../>
    ......            
</controls:DataGrid.Columns>

推荐阅读