c# - 我想根据数据库中的颜色为特定单元格动态设置 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>
解决方案
您是否使用社区工具包中的 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>
推荐阅读
- javascript - 从 1970 年之前的日期数组中获取最高日期
- java - Java Vertx 无法使用 webClient 为我的发布请求提供用户 ID 密码
- elixir - 阻止 ecto 抛出唯一约束错误
- swift - 将数据从模型传递到 collectionViewCell
- python - 如何将每月数据转换为熊猫数据框中的每年数据?
- python-3.x - .代码定位许多相同颜色的像素,但错误表明存在歧义
- java - 删除动态链表的中间节点(如果存在)
- javascript - 我可以用 HTML/CSS 和 javascript 创建一个登录页面,然后再添加 VUE 吗?
- java - 用 if/else 部分告诉 Java 识别类型
- javascript - 代码在我的 wix 网站的后端意外停止