0. 说明

/*********************************
* 本示例实现功能
1.DataGrid基本操作
2.列标题样式
3.内容居中
2.根据条件设置最后一列单元格前景色
3.根据条件设置行前景色
5.自定义分隔线
***********************************/

1. XAML:

<Window x:Class="Summary.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="600">
    <Grid>
  <DataGrid Name="dgTasks" AutoGenerateColumns="False" Margin="10" 
      SelectionMode="Single" ItemsSource="{Binding}" 
      IsReadOnly="True" HeadersVisibility="Column" GridLinesVisibility="None">
   <DataGrid.Resources>
    <!--设置列标题样式-->
    <Style TargetType="DataGridColumnHeader" x:Key="stlColumnHeader">
     <Setter Property="Height" Value="38"/>
     <Setter Property="FontSize" Value="14"/>
     <Setter Property="FontWeight" Value="Bold"/>
     <Setter Property="HorizontalContentAlignment" Value="Center"/>
     <Setter Property="BorderBrush" Value="#bbbbbb"/>
     <Setter Property="BorderThickness" Value="0 0 1 0"/>
    </Style>
    <!--设置DataGrid内容居中-->
    <Style TargetType="TextBlock" x:Key="stlContent">
     <Setter Property="HorizontalAlignment" Value="Center" />
     <Setter Property="VerticalAlignment" Value="Center"/>
    </Style>
    <!--设置DataGrid内容样式及行的前景色-->
    <Style TargetType="DataGridRow">
     <Setter Property="Height" Value="38"/>
     <Setter Property="FontSize" Value="14"/>
     <Setter Property="Foreground" Value="{Binding RowForeground}"/>
    </Style>
    <!--设置DataGrid单元格样式:分隔线,选中变色[最后一个单元格有自己单独的样式]-->
    <Style TargetType="DataGridCell">
     <Setter Property="BorderBrush" Value="#bbbbbb"/>
     <Setter Property="BorderThickness" Value="0 0 1 1"/>
     <Style.Triggers>
      <Trigger Property="IsSelected" Value="True">
       <Setter Property="Background" Value="#ffc343"/>
       <Setter Property="Foreground" Value="#515151"/>
      </Trigger>
     </Style.Triggers>
    </Style>
   </DataGrid.Resources>
   <DataGrid.Columns>
    <DataGridTextColumn Header="任务编号" Binding="{Binding TaskID}" 
         Width="120*" HeaderStyle="{StaticResource stlColumnHeader}"
         ElementStyle="{StaticResource stlContent}"/>
    <DataGridTextColumn Header="任务名称" Binding="{Binding Name}"
            Width="120*" HeaderStyle="{StaticResource stlColumnHeader}"
         ElementStyle="{StaticResource stlContent}"/>
    <DataGridTextColumn Header="任务描述" Binding="{Binding TaskDesc}"
         Width="250*" HeaderStyle="{StaticResource stlColumnHeader}"
         ElementStyle="{StaticResource stlContent}"/>
    <DataGridTextColumn Header="任务状态" Binding="{Binding State}"
         Width="100" HeaderStyle="{StaticResource stlColumnHeader}"
         ElementStyle="{StaticResource stlContent}">
     <DataGridTextColumn.CellStyle>
      <Style TargetType="DataGridCell">
       <Setter Property="Foreground" Value="{Binding CellForeground}"/>
       <Setter Property="BorderBrush" Value="#bbbbbb"/>
       <Setter Property="BorderThickness" Value="0 0 1 1"/>
       <Style.Triggers>
        <Trigger Property="IsSelected" Value="true">
         <Setter Property="Background" Value="#ffc343"/>
         <Setter Property="BorderBrush" Value="#ffc343"/>
        </Trigger>
       </Style.Triggers>
      </Style>
     </DataGridTextColumn.CellStyle>
    </DataGridTextColumn>
        
   </DataGrid.Columns>
  </DataGrid>
 </Grid>
</Window>
2. CODE

using System.Collections.Generic;
using System.Windows;

namespace Summary
{

public partial class MainWindow : Window
    {
        private List<Task> tasks = new List<Task>();

public MainWindow()
        {
            InitializeComponent();
            this.InitializeDataGrid();
        }

/// <summary>
        /// 获取任务列表
        /// </summary>
        private void InitializeDataGrid()
        {
            Task task = new Task();
            task.TaskID = "T0001";
            task.Name = "任务一";
            task.TaskDesc = "任务一未按时完成";
            task.State = TaskState.未完成;
            tasks.Add(task);

task = new Task();
            task.TaskID = "T0002";
            task.Name = "任务二";
            task.TaskDesc = "任务二按时完成";
            task.State = TaskState.已完成;
            tasks.Add(task);

task = new Task();
            task.TaskID = "T0003";
            task.Name = "任务三";
            task.TaskDesc = "任务三超额完成";
            task.State = TaskState.超额完成;
            tasks.Add(task);

task = new Task();
            task.TaskID = "T0004";
            task.Name = "任务四";
            task.TaskDesc = "任务四夭折";
            task.State = TaskState.夭折;
            tasks.Add(task);

task = new Task();
            task.TaskID = "T0005";
            task.Name = "任务五";
            task.TaskDesc = "任务五夭折";
            task.State = TaskState.夭折;
            tasks.Add(task);
            //设置与单元格及行相关的前景色
            this.SetRelativeForeground(ref tasks);

dgTasks.DataContext = tasks;
        }

/// <summary>
        /// 设置与前景色相关的属性
        /// </summary>
        /// <param name="tasks"></param>
        private void SetRelativeForeground(ref List<Task> tasks)
        {
            foreach (Task task in tasks)
            {
                task.RowForeground = "#515151";
                switch (task.State)
                {
                    case TaskState.未完成:
                        task.CellForeground = "#1e008d";
                        break;
                    case TaskState.已完成:
                        task.CellForeground = "#009864";
                        break;
                    case TaskState.超额完成:
                        task.CellForeground = "#0050a2";
                        break;
                    case TaskState.夭折:
                        task.CellForeground = "#979797";
                        task.RowForeground = "#979797";
                        break;
                }
            }
        }
    }
}

(转载)WPF:DataGrid设置行、单元格的前景色的更多相关文章

  1. c# WPF DataGrid 获取选中单元格信息

    private void Dg_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { Console.Write ...

  2. WPF:获取DataGrid控件单元格DataGridCell

    转载:http://blog.csdn.net/jhqin/article/details/7645357 /* ------------------------------------------- ...

  3. WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter

    一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...

  4. poi excel设置合并单元格边框格式

    版本3.17 //设置合并单元格的边框 public static void setBorderForMergeCell(BorderStyle style,int color, CellRangeA ...

  5. [Xcode 实际操作]五、使用表格-(3)设置UITableView单元格图标

    目录:[Swift]Xcode实际操作 本文将演示如何给表格行设置图标. 打开资源文件夹[Assets.xcassets], 在资源文件夹中导入两张图片:一张彩色,一张灰色,作为单元格的图标. [+] ...

  6. [Xcode 实际操作]五、使用表格-(2)设置UITableView单元格高度

    目录:[Swift]Xcode实际操作 本文将演示如何制作一个自定义行高的表格视图 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首 ...

  7. NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat

    NPOI2.2.0.0实例详解(十)—设置EXCEL单元格[文本格式] 2015年12月10日 09:55:17 阅读数:3150 using System; using System.Collect ...

  8. 如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter

    一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...

  9. wpf datagrid设置右键菜单打开时选中项的背景色

    原文:wpf datagrid设置右键菜单打开时选中项的背景色 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/artic ...

随机推荐

  1. Attribute meta-data#android.support.VERSION@value value=(25.4.0) from AndroidManifest.xml:25:13-35 is also present at AndroidManifest.xml:28:13-35 value=(26.1.0).

    Android Studio 编译项目的时候报错 Merging Errors: Error: Attribute meta-data#android.support.VERSION@value va ...

  2. hadoop学习笔记之-hbase完全分布模…

    安装环境: OS: Oracle linux 5.6 JDK: jdk1.6.0_18 Hadoop: hadoop-0.20.2 Hbase: hbase-0.90.5 安装准备: 1. Jdk环境 ...

  3. iis部署错误:HTTP 错误 500.21 - Internal Server Error

    将网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“PageHandlerFactory-Integr”在其模块列表中有一个错 ...

  4. IE各栏的截图说明

    工具栏  包括  状态栏  命令栏   菜单栏   收藏栏 IE工具 > 工具栏  > 状态栏 有状态栏显示 无状态栏显示 菜单栏 快捷键  alt  可以快速展示  菜单栏    ,查看 ...

  5. debian linux中文桌面系统安装

    一.基本系统安装 1 .安装光盘:可以到http://debian.cn99.com去下载ISO,我是之前从官方网站下载的.一只载第一张光盘即可.用NERO烧录成光碟. 2.将安装光盘放驱,并在BIO ...

  6. AutoHotkey常用配置

    ; 开发常用 ^e:: run D:\soft\java\MyEclipse for Spring 2014\myeclipseforspring.exe return ^d:: run D:\sof ...

  7. iOS - 验证输入的是否是正确的身份证号码和手机号码

    - (BOOL)checkIdentityCardNo:(NSString*)cardNo { if (cardNo.length != 18) { return  NO; } NSArray* co ...

  8. PJzhang:安全小课堂-安全软件为什么很重要,看这里!

    猫宁!!! 参考链接: http://www.360.cn/webzhuanti/mianyigongju.html https://www.freebuf.com/fevents/204100.ht ...

  9. background-attachment:fixed不兼容性

    ios系统和某些移动端background-attachment:fixed不兼容性,没有任何效果,但可以hack一下就可以了,代码如下: ps:想在哪个标签加背景,可以在它class后:before ...

  10. [软件工程基础]2017.11.06 第十次 Scrum 会议

    具体事项 项目交接燃尽图 每人工作内容 成员 已完成的工作 计划完成的工作 工作中遇到的困难 游心 #62 调试生成报告代码:#60 整理物理网站上的实验流程:#71 撰写报告生成搭建文档: 李煦通 ...