首页 > 解决方案 > 数据网格中一列中的 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 列做彩色单元格吗?

标签: wpfxaml

解决方案


除了在整个数据网格上,还有一个可以在数据网格列上使用的 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>

使用特定于该位置的复杂逻辑,可以更容易地维护将该逻辑封装在行视图模型中并“仅”返回一个画笔进行绑定。然后,该视图不依赖于枚举或其他任何内容。然后有人争辩说,决定呈现方式是一种观点责任。我个人的观点是,越容易维护的就是最好的。


推荐阅读