本次要实现的效果为:

这个DataGrid需要绑定一个集合对象,所以要先定义一个Experience类,包含三个字段

/// <summary>

/// 定义工作经历类

/// </summary>

public class Experience

{

/// <summary>

/// 获取或设置工作的起始时间

/// </summary>

public string Start { get; set; }

/// <summary>

/// 获取或设置工作的结束时间

/// </summary>

public string End { get; set; }

/// <summary>

/// 获取或设置工作地点

/// </summary>

public string Location { get; set; }

}

接下来在 Window_Loaded(object sender, RoutedEventArgs e) 时间中设置DataGrid的数据源

private void Window_Loaded(object sender, RoutedEventArgs e)
{
            List<Experience> list = new List<Experience>()
            {
                new Experience(){ Start="1990-01-01", End="1991-01-01", Location="北京"},
                new Experience(){ Start="1991-01-01", End="1992-01-01", Location="郑州"},
                new Experience(){ Start="1992-01-01", End="1993-01-01", Location="上海"},
                new Experience(){ Start="1993-01-01", End="1994-01-01", Location="洛阳"},
                new Experience(){ Start="1994-01-01", End="1995-01-01", Location="天津"},
                new Experience(){ Start="1995-01-01", End="1996-01-01", Location="大连"},
            };

//把XAML中DataGrid的ItemSource绑定到List对象上去
            this.grid_user.ItemsSource = list;   
       
}

接下来看一下XAML中是怎样创建DataGrid

<Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="30"/>
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Label Background="#82c772"
                               Content="个人经历"
                               Padding="20,5,0,0"
                               FontSize="14"
                               Foreground="White" />
                        <DataGrid Name="grid_saffer"
                                  Grid.Row="1"
                                  IsReadOnly="True"
                                  AlternationCount="2"
                                  AutoGenerateColumns="true" >
                            <DataGrid.Columns>
                                <DataGridTextColumn Header="开始时间"
                                                    Width="1*"
                                                    Binding="{Binding start}" />
                                <DataGridTextColumn Header="结束时间"
                                                    Width="1*"
                                                    Binding="{Binding end}" />
                                <DataGridTextColumn Header="地点"
                                                    Width="1*"
                                                    Binding="{Binding location}" />
                            </DataGrid.Columns>
                        </DataGrid>
                    </Grid>

这里有几个属性需要说一下

AlternationCount="2"   表示两行交替显示背景色。如果不设置此属性则显示效果为:

AutoGenerateColumns="False"   表示不让DataGrid自动生成列。如果设置成true,则效果如下: 多出了不需要的列

HeadersVisibility="Column" 设置此属性为只显示列标题单元格,行标题不显示。如果不设置此属性则效果为:

到此为止还没有真正为DataGrid添加任何样式,接下来展示样式代码

<Application x:Class="ListviewStyle.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:location="clr-namespace:ListviewStyle"  StartupUri="MainWindow.xaml">

<Application.Resources>

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style TargetType="DataGrid">

<!--网格线颜色-->

<Setter Property="CanUserResizeColumns"   Value="false" />     //该属性指示是否允许用户调整列宽度

<Setter Property="Background"   Value="#E6DBBB" />

<Setter Property="BorderBrush"    Value="#d6c79b" />

<Setter Property="HorizontalGridLinesBrush">

<Setter.Value>

<SolidColorBrush Color="#d6c79b" />

</Setter.Value>

</Setter>

<Setter Property="VerticalGridLinesBrush">

<Setter.Value>

<SolidColorBrush Color="#d6c79b" />

</Setter.Value>

</Setter>

</Style>

<!--标题栏样式-->

<!--<Style  TargetType="DataGridColumnHeader" >

<Setter Property="Width" Value="50"/>

<Setter Property="Height" Value="30"/>

<Setter Property="FontSize" Value="14" />

<Setter Property="Background" Value="White" />

<Setter  Property="FontWeight"  Value="Bold"/>

</Style>-->

<Style TargetType="DataGridColumnHeader">

<Setter Property="SnapsToDevicePixels"   Value="True" />

<Setter Property="MinWidth"   Value="0" />

<Setter Property="MinHeight"   Value="28" />

<Setter Property="Foreground"    Value="#323433" />

<Setter Property="FontSize"   Value="14" />

<Setter Property="Cursor"     Value="Hand" />

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="DataGridColumnHeader">

<Border x:Name="BackgroundBorder"    BorderThickness="0,1,0,1"   BorderBrush="#e6dbba"  Width="Auto">

<Grid>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="*" />

</Grid.ColumnDefinitions>

<ContentPresenter  Margin="0,0,0,0"  VerticalAlignment="Center"  HorizontalAlignment="Center" />

<Path x:Name="SortArrow"  Visibility="Collapsed"   Data="M0,0 L1,0 0.5,1 z"  Stretch="Fill"    Grid.Column="2"

Width="8"

Height="6"

Fill="White"

Margin="0,0,50,0"

VerticalAlignment="Center"

RenderTransformOrigin="1,1" />

<Rectangle Width="1"

Fill="#d6c79b"

HorizontalAlignment="Right"

Grid.ColumnSpan="1" />

<!--<TextBlock  Background="Red">

<ContentPresenter></ContentPresenter></TextBlock>-->

</Grid>

</Border>

</ControlTemplate>

</Setter.Value>

</Setter>

<Setter Property="Height"

Value="25" />

</Style>

<!--行样式触发-->

<!--背景色改变必须先设置cellStyle 因为cellStyle会覆盖rowStyle样式-->

<Style  TargetType="DataGridRow">

<Setter Property="Background"

Value="#F2F2F2" />

<Setter Property="Height"

Value="25" />

<Setter Property="Foreground"

Value="Black" />

<Style.Triggers>

<!--隔行换色-->

<Trigger Property="AlternationIndex"

Value="0">

<Setter Property="Background"

Value="#e7e7e7" />

</Trigger>

<Trigger Property="AlternationIndex"

Value="1">

<Setter Property="Background"

Value="#f2f2f2" />

</Trigger>

<Trigger Property="IsMouseOver"

Value="True">

<Setter Property="Background"

Value="#fbe178" />

<!--<Setter Property="Foreground" Value="White"/>-->

</Trigger>

<Trigger Property="IsSelected"

Value="True">

<Setter Property="Foreground"

Value="Black" />

</Trigger>

</Style.Triggers>

</Style>

<!--单元格样式触发-->

<Style TargetType="DataGridCell">

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="DataGridCell">

<TextBlock TextAlignment="Center"

VerticalAlignment="Center">

<ContentPresenter />

</TextBlock>

</ControlTemplate>

</Setter.Value>

</Setter>

<Style.Triggers>

<Trigger Property="IsSelected"

Value="True">

<!--<Setter Property="Background" Value="White"/>

<Setter Property="BorderThickness" Value="0"/>-->

<Setter Property="Foreground"

Value="Black" />

</Trigger>

</Style.Triggers>

</Style>

</ResourceDictionary>

</Application.Resources>

</Application>

建议:样式代码比较多,最好是先复制到自己项目中看效果,然后再细看样式的实现。 在此,内容已介绍完,如有疑问请留言。

wpf 中DataGrid 控件的样式设置及使用的更多相关文章

  1. winform中DataGrid控件的宽度设置

    最近修改一个win5.0的PDA程式,碰到一个问题.就是给DataGrid控件绑定数据的时候,这个控件的宽度不能调整,有时候数据较长,就显示不全.然后想在程式里自定义它的宽度,设置不成功.然后网上没找 ...

  2. Working Experience - WPF 中 DataGrid 控件的应用

    问题: 添加控件后, 编辑单元格会出现异常 绑定 ItemsSource 属性后, 更新绑定对象的数据, UI 不刷新 如何显示控件中 ComboBox 类型 解决方法: 绑定 ItemsSource ...

  3. EasyUI中datagrid控件的使用 设置多行表头(两行或多行)

    EasyUI中的datagrid控件十分强大,能生成各种复杂的报表,现在因为项目需要,需要生成一个表头两行的表,找了一些说明文档,以下用一个实例来说明一下: 第一种方法: $('#divData'). ...

  4. WPF中DataGrid控件内Button的Command和CommandParameter的绑定

    场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件.希望点击Button后执行对应的操作,但是设置Butt ...

  5. WPF中DataGrid控件的过滤(Filter)性能分析及优化

    DataGrid控件是一个列表控件, 可以进行过滤,排序等.本文主要针对DataGrid的过滤功能进行分析, 并提供优化方案. 1)DataGrid的过滤过程:      用户输入过滤条件       ...

  6. WPF中Datagrid控件添加行号

    /// <summary> /// 导入Excel文件按钮 /// </summary> /// <param name="sender">&l ...

  7. WPF中获取控件默认样式和模板XML

    从微软官方找这个东西甚是困难,似乎根本没有提供.网上说因为版本问题,很难找到,但通过代码却可以轻易获得.经测试,生成的样式文件非常完美,完全不用修改即可应用. 代码如下: public static ...

  8. WPF 4 DataGrid 控件(自定义样式篇)

    原文:WPF 4 DataGrid 控件(自定义样式篇)      在<WPF 4 DataGrid 控件(基本功能篇)>中我们已经学习了DataGrid 的基本功能及使用方法.本篇将继续 ...

  9. WPF 4 DataGrid 控件(进阶篇一)

    原文:WPF 4 DataGrid 控件(进阶篇一)      上一篇<WPF 4 DataGrid 控件(自定义样式篇)>中,我们掌握了DataGrid 列表头.行表头.行.单元格相关的 ...

随机推荐

  1. FILTER优化

    explain plan for select a.* from fxqd_list_20131115_new_100 a where (acct_no, oper_no, seqno, trans_ ...

  2. Condition-线程通信更高效的方式

    接近一周没更新<Java线程>专栏了,主要是这周工作上比较忙,生活上也比较忙,呵呵,进入正题,上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且Rea ...

  3. 深入浅出Node.js (附录D) - 搭建局域NPM仓库

    D.1 NPM仓库的安装 D.1.1 安装Erlang和CouchDB D.1.2 搭建NPM仓库 D.2 高阶应用 D.2.1 镜像仓库 D.2.2 私有模块应用 D.2.3 纯私有仓库 D.3 总 ...

  4. VM Depot 镜像新增系列II – 学习管理系统,内容管理系统以及平台管理工具

     发布于 2014-06-23 作者 刘 天栋 继上周企业管理软件和电子商务镜像的加盟之后,我们看到又有一批内容管理解决方案(CMS),学习管理解决方案(LMS)以及平台管理工具 (如 Open ...

  5. C++之函数指针

    函数指针常用的有三类 1.指向普通函数的函数指针 2.指向类中静态成员函数的函数指针 3.指向类的成员函数的函数指针 一.指向普通函数的函数指针 #include <iostream> u ...

  6. Alfred(未完待续)

    之前曾经有写过一篇QuickSilver的博文,大力称赞它是Mac下的神器,但是现在,QS光荣下岗了,因为我找到了另外一款比QS更加好用,更加神器的APP:Alfred小帽子. 软件名:Alfred ...

  7. 《University Calculus》-chape5-积分法-微积分基本定理

    定积分中值定理: 积分自身的定义是简单的,但是在教学过程中人们往往记得的只是它的计算方法,在引入积分的概念的时候,往往就将其与计算方法紧密的捆绑在一起,实际上,在积分简单的定义之下,微积分基本定理告诉 ...

  8. 第十七章、程序管理与 SELinux 初探

    ---恢复内容开始--- 什么是程序 (process) 在 Linux 底下所有的命令与你能够进行的动作都与权限有关, 而系统依据UID/GID以及文件的属性相关性判定你的权限!在 Linux 系统 ...

  9. 钥匙计数之一 - HDU 1438(状态压缩打表)

    分析:首先想到每个钥匙的结尾有4种状态,不过题目还需要判断有三种不同的钥匙深度,所以每种深度结尾后有2^4种状态,0000->1111,不过题目还需需要有相邻的钥匙深度大于等于3,所以需要两种不 ...

  10. 月見(つきみ) 夕(ゆう) SumiHui.墨虺

    造影早迎中秋,自己通过word设计的