(转载)WPF:DataGrid设置行、单元格的前景色
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设置行、单元格的前景色的更多相关文章
- c# WPF DataGrid 获取选中单元格信息
private void Dg_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { Console.Write ...
- WPF:获取DataGrid控件单元格DataGridCell
转载:http://blog.csdn.net/jhqin/article/details/7645357 /* ------------------------------------------- ...
- WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter
一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...
- poi excel设置合并单元格边框格式
版本3.17 //设置合并单元格的边框 public static void setBorderForMergeCell(BorderStyle style,int color, CellRangeA ...
- [Xcode 实际操作]五、使用表格-(3)设置UITableView单元格图标
目录:[Swift]Xcode实际操作 本文将演示如何给表格行设置图标. 打开资源文件夹[Assets.xcassets], 在资源文件夹中导入两张图片:一张彩色,一张灰色,作为单元格的图标. [+] ...
- [Xcode 实际操作]五、使用表格-(2)设置UITableView单元格高度
目录:[Swift]Xcode实际操作 本文将演示如何制作一个自定义行高的表格视图 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首 ...
- NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat
NPOI2.2.0.0实例详解(十)—设置EXCEL单元格[文本格式] 2015年12月10日 09:55:17 阅读数:3150 using System; using System.Collect ...
- 如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter
一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...
- wpf datagrid设置右键菜单打开时选中项的背景色
原文:wpf datagrid设置右键菜单打开时选中项的背景色 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/artic ...
随机推荐
- 将eclipse java程序打包成jar的总结(包括工程中没有引用外部jar包和有引用外部jar包两种情况)
一.当eclispe java工程中没有引用外部jar包时: 选中工程---->右键,Export...--->Java--->JAR file--->next-->填写 ...
- [poj3140]Contestants Division树形dp
题意:切掉树上的某条边,使分开的两棵树上各点的权值和差值最小. 与hdu2196不同的是,此题是点权,其他无太大差别,注意数据范围. 先求出每个节点的子树权值和,然后自底向上dp即可.取$\min ( ...
- vue 之 折线图挤压
当tab标签栏变动时,echarts图会发生挤,这种情况,发现是html容器的width=100%这个设置,变成了width=100px. 解决方式: 1.设置一个最小宽度,获取width的值,当这个 ...
- POJ-3280
Cheapest Palindrome Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10301 Accepted: 4 ...
- php学习笔记-PHP中的几个取整函数
floor是向下取整,比如4.5,它是在4和5之间的一个数,那么结果就是4. ceil是向上取整,比如3.7,它是在3和4之间的一个数,那么结果就是4. round是对一个数四舍五入,小数部分如果小于 ...
- 使用VSTO写的一个工作证打印软件
转行做HR近2年.最近公司要做工牌,工牌上要打印照片,姓名,工号和部门等信息.一共1000多人,如果手工排版手工打印的话,估计要死人. 于是coding的老毛病又犯了,想写个程序来打印工牌.还是拿最近 ...
- iOS ipa包重签名
背景:公司做游戏SDK的,提供SDK给第三方后,他们打包过来我们需要分发在不同的渠道,这个时候需要修改SDK的配置文件,ipa文件修改后是需要手机越狱或者ipa重签名才能安装成功的,所以研究了一下重签 ...
- HTML5学习笔记(二)新元素和功能
<canvas> 新元素(必须使用脚本来绘制图形) 标签 描述 <canvas> 标签定义图形,比如图表和其他图像.该标签基于 JavaScript 的绘图 API HTML5 ...
- poj3667(线段树区间合并&区间查询)
题目链接: http://poj.org/problem?id=3667 题意:第一行输入 n, m表示有 n 间房间(连成一排的), 接下来有 m 行输入, 对于接下来的 m 行输入: 1 x : ...
- 51nod1287(二分/线段树区间最值&单点更新)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1287 题意:中文题诶- 解法1:b[i] 存储 max(a[0 ...