wpf - 数据网格中一列中的 WPF 样式单元格
问题描述
我有一个问题,我有一个有 4 列的表,第 4 列是状态列,我想根据状态为第 4 列的单元格着色,所以我尝试了类似的方法:
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderBrush" Value="#bababa" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Foreground" Value="White" />
<Style.Triggers>
<DataTrigger Binding="{Binding DataCollectionStatus}" Value="{x:Static collectionStatus:ModuleDataCollectionStatus.Collected}">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding DataCollectionStatus}" Value="{x:Static collectionStatus:ModuleDataCollectionStatus.Collecting}">
<Setter Property="Background" Value="Orange" />
</DataTrigger>
<DataTrigger Binding="{Binding DataCollectionStatus}" Value="{x:Static collectionStatus:ModuleDataCollectionStatus.NotCollected}">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Width="100" Header="Module type" Binding="{Binding ModuleTypeAsString}" />
<DataGridTextColumn Width="70" Header="Rack ID" Binding="{Binding RackIdAsString}" />
<DataGridTextColumn Width="70" Header="Slot no" Binding="{Binding ModuleSlotAsString}" />
<DataGridTextColumn Width="200" Header="Status" Binding="{Binding DataCollectionStatusAsString}" />
</DataGrid.Columns>
好吧,它部分工作,因为它根据状态为所有单元格着色,我也尝试将 Style 添加到 DataGridTextColumn 但我收到消息,我无法访问这些属性。
我可以只在第 4 列做彩色单元格吗?
解决方案
除了在整个数据网格上,还有一个可以在数据网格列上使用的 cellstyle 属性。举个例子:
<DataGridTextColumn Binding="{Binding Title}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{Binding bBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
使用特定于该位置的复杂逻辑,可以更容易地维护将该逻辑封装在行视图模型中并“仅”返回一个画笔进行绑定。然后,该视图不依赖于枚举或其他任何内容。然后有人争辩说,决定呈现方式是一种观点责任。我个人的观点是,越容易维护的就是最好的。
推荐阅读
- keras - 如何将 PCA 和 keras 分类器放入 sklearn 管道并进行网格搜索 CV?
- python - 使用 fill_between 更改线条颜色
- c# - “找不到 Update.exe,不是 Squirrel 安装的应用程序”错误中指定的 Update.exe 是什么?
- mysql - 如何优化这个包含带有纪元时间范围的 where 子句的 mysql 查询?
- react-native - 如何在 react-native-reanimated 中检查动画是否完成
- html - 如何在 Angular 8 中的 formarray 中应用验证
- c# - Applitools + Specflow + Selenium + C#
- python - 用于同时运行多个脚本的 Python 脚本
- javascript - 实时更新 a-sky src 时的问题
- d3.js - d3 JS 版本 6 d3.v6.min.js:2 Uncaught (in promise) TypeError