WPF 自定义DataGrid控件样式

样式一:
样式代码:

 <!--DataGrid样式--><Style TargetType="DataGrid"><!--网格线颜色--><Setter Property="CanUserResizeColumns" Value="false"/><Setter Property="Background" Value="#FFF7EDAD" /><Setter Property="BorderBrush" Value="#FFF5F7F5" /><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="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" /></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="LightGray"/><!--<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="Foreground" Value="Black"/></Trigger></Style.Triggers></Style>

引用示例:

<DataGrid x:Name="DataGrid" AutoGenerateColumns="False"  VerticalAlignment="Top"CanUserSortColumns="False"     Margin="5" IsReadOnly="True"CanUserResizeColumns="False" CanUserResizeRows="False"  SelectionMode="Single"CanUserReorderColumns="False" AlternationCount="2"  RowHeaderWidth="0" CanUserAddRows="False" ><DataGrid.Columns><DataGridTextColumn Header="名称" Width="150"  Binding="{Binding  Name}"/><DataGridTextColumn Header="班级"   Width="120"  Binding="{Binding Class}"/><DataGridTextColumn Header="性别"  Width="120"  Binding="{Binding Sex}"/><DataGridTextColumn Header="班级排名"  Width="130"  Binding="{Binding ClassRank}"/><DataGridTextColumn Header="全校排名"  Width="140"  Binding="{Binding SchoolRank}"/></DataGrid.Columns>
</DataGrid>

初始化绑定数据C#代码:

public partial class MainWindow : Window{public MainWindow(){InitializeComponent();StudentList = new List<StudentInfo>(){new StudentInfo(){Name="张三",Class="三班",Sex="男",ClassRank=10,SchoolRank=103},new StudentInfo(){Name="李四",Class="三班",Sex="男",ClassRank=12,SchoolRank=110},new StudentInfo(){Name="李梅",Class="三班",Sex="女",ClassRank=3,SchoolRank=70},};this.DataGrid.ItemsSource = StudentList;}public List<StudentInfo> StudentList { get; set; }public class StudentInfo{public string Name { get; set; }public string Class { get; set; }public string Sex { get; set; }public int ClassRank { get; set; }public int SchoolRank { get; set; }}

效果展示:

样式二:
上面的代码实现了隔行换色的效果,但是没有鼠标选中效果。另外有些用户希望能够进行列头拖动及排序。那么就需要做以下更改:

添加DataGridRow样式:

<Style x:Key="AlertCount1" 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="White" /></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="LightGray"/></Trigger><Trigger Property="IsSelected" Value="True"><Setter Property="Foreground" Value="Black"/><Setter Property="Background" Value="LightGray"/></Trigger></Style.Triggers></Style>

在引用时,设置DataGrid的RowStyle="{StaticResource AlertCount1}"且AlternationCount=“1”。这样就可以实现突出选中效果,取消隔行显示效果。要实现表头拖动,使用上面的样式代码是不行的,上面的样式代码去掉了拖动的控件。要实现拖动需要将其加上。

样式三:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp5"xmlns:sys="clr-namespace:System;assembly=mscorlib"><sys:Double x:Key="DataGridRow.Height">33</sys:Double><!--  表格外边框线粗细,一般不修改  --><Thickness x:Key="DataGrid.BorderThickness" Bottom="1" Left="1" Right="1" Top="1"/><!--  列头边框粗细,一般不修改  --><Thickness x:Key="ColumnHeader.BorderThickness" Bottom="0" Left="0" Right="1" Top="0"/><!--  行边框粗细,一般不修改  --><Thickness x:Key="DataGridRow.BorderThickness" Bottom="0" Left="0" Right="0" Top="1"/><!--  表格外边框颜色  --><SolidColorBrush x:Key="DataGrid.BorderBrush" Color="#E9ECF1" /><!--  列头背景色  --><SolidColorBrush x:Key="ColumnHeader.Background" Color="#F6F7FB" /><!--  列头边框颜色  --><SolidColorBrush x:Key="ColumnHeader.BorderBrush" Color="#E9ECF1" /><!--  行边框颜色  --><SolidColorBrush x:Key="DataGridRow.BorderBrush" Color="#E9ECF1" /><!--  行默认背景颜色  --><SolidColorBrush x:Key="DataGridRow.Normal.Background" Color="#FFFFFF" /><!--  行默认文字颜色  --><SolidColorBrush x:Key="DataGridRow.Normal.Foreground" Color="#000000" /><!--  行悬浮背景颜色  --><SolidColorBrush x:Key="DataGridRow.MouseOver.Background" Color="#F6F7FB" /><!--  行悬浮文字颜色  --><SolidColorBrush x:Key="DataGridRow.MouseOver.Foreground" Color="#000000" /><!--  行选中背景颜色  --><SolidColorBrush x:Key="DataGridRow.Selected.Background" Color="#F6F7FB" /><!--  行选中文字颜色  --><SolidColorBrush x:Key="DataGridRow.Selected.Foreground" Color="#000000" /><Style TargetType="DataGrid"><!--  网格线颜色  --><Setter Property="RowHeaderWidth" Value="0" /><Setter Property="BorderThickness" Value="{StaticResource DataGrid.BorderThickness}" /><Setter Property="HeadersVisibility" Value="Column" /><Setter Property="Background" Value="{StaticResource ColumnHeader.Background}" /><Setter Property="BorderBrush" Value="{StaticResource DataGrid.BorderBrush}" /><Setter Property="HorizontalGridLinesBrush" Value="#00E9ECF1" /><Setter Property="VerticalGridLinesBrush" Value="#00E9ECF1" /><Setter Property="UseLayoutRounding" Value="True" /><Setter Property="SnapsToDevicePixels" Value="True" /><Setter Property="AutoGenerateColumns" Value="False" /><Setter Property="CanUserAddRows" Value="False" /><Setter Property="CanUserReorderColumns" Value="False" /><Setter Property="CanUserResizeColumns" Value="False" /><Setter Property="CanUserResizeRows" Value="False" /><Setter Property="CanUserSortColumns" Value="False" /><Setter Property="GridLinesVisibility" Value="None" /><Setter Property="IsReadOnly" Value="True" /><Setter Property="RowHeight" Value="{StaticResource DataGridRow.Height}" /><Setter Property="SelectionMode" Value="Single" /></Style><!--列头样式--><Style TargetType="DataGridColumnHeader"><Setter Property="SnapsToDevicePixels" Value="True" /><Setter Property="Foreground" Value="#000000" /><Setter Property="FontSize" Value="12" /><Setter Property="Cursor" Value="Hand" /><Setter Property="Height" Value="28" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridColumnHeader"><Border x:Name="BackgroundBorder" Width="Auto" Margin="-1,0"BorderBrush="{StaticResource ColumnHeader.BorderBrush}"BorderThickness="{StaticResource ColumnHeader.BorderThickness}"SnapsToDevicePixels="True" UseLayoutRounding="True"><ContentPresenter Margin="5,0" HorizontalAlignment="Center" VerticalAlignment="Center" /></Border></ControlTemplate></Setter.Value></Setter></Style><!--  行样式触发  背景色改变必须先设置cellStyle 因为cellStyle会覆盖rowStyle样式  --><Style TargetType="{x:Type DataGridRow}"><Setter Property="Background" Value="{StaticResource DataGridRow.Normal.Background}" /><Setter Property="Foreground" Value="{StaticResource DataGridRow.MouseOver.Foreground}" /><Setter Property="SnapsToDevicePixels" Value="true" /><Setter Property="UseLayoutRounding" Value="True" /><Setter Property="Validation.ErrorTemplate" Value="{x:Null}" /><Setter Property="BorderThickness" Value="{StaticResource DataGridRow.BorderThickness}" /><Setter Property="BorderBrush" Value="{StaticResource DataGridRow.BorderBrush}" /><Setter Property="ValidationErrorTemplate"><Setter.Value><ControlTemplate><TextBlock Margin="0,0,0,0" VerticalAlignment="Center" Foreground="Red" Text="!" /></ControlTemplate></Setter.Value></Setter><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type DataGridRow}"><Border x:Name="DGR_Border" Margin="0,0,0,-1"Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"SnapsToDevicePixels="True" UseLayoutRounding="True"><SelectiveScrollingGrid><SelectiveScrollingGrid.ColumnDefinitions><ColumnDefinition Width="Auto" /><ColumnDefinition Width="*" /></SelectiveScrollingGrid.ColumnDefinitions><SelectiveScrollingGrid.RowDefinitions><RowDefinition Height="*" MinHeight="{StaticResource DataGridRow.Height}" /><RowDefinition Height="Auto" /></SelectiveScrollingGrid.RowDefinitions><DataGridCellsPresenter Grid.Column="1"ItemsPanel="{TemplateBinding ItemsPanel}"SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /><DataGridDetailsPresenter Grid.Row="1" Grid.Column="1"SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen,ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical},Converter={x:Static DataGrid.RowDetailsScrollingConverter},RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"Visibility="{TemplateBinding DetailsVisibility}" /><DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"Visibility="{Binding HeadersVisibility,ConverterParameter={x:Static DataGridHeadersVisibility.Row},Converter={x:Static DataGrid.HeadersVisibilityConverter},RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /></SelectiveScrollingGrid></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="{StaticResource DataGridRow.MouseOver.Foreground}" /><Setter Property="Background" Value="{StaticResource DataGridRow.MouseOver.Background}" /></Trigger><Trigger Property="IsSelected" Value="True"><Setter Property="Foreground" Value="{StaticResource DataGridRow.Selected.Foreground}" /><Setter Property="Background" Value="{StaticResource DataGridRow.Selected.Background}" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><!--  单元格样式触发  --><Style TargetType="DataGridCell"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridCell"><Border x:Name="Bg" Background="Transparent" UseLayoutRounding="True"><ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /></Border></ControlTemplate></Setter.Value></Setter><Style.Triggers><Trigger Property="IsSelected" Value="True"><Setter Property="Background" Value="Transparent" /><Setter Property="Foreground" Value="#000000" /></Trigger></Style.Triggers></Style>
</ResourceDictionary>

引用:

<StackPanel><DataGrid x:Name="grd" ItemsSource="{Binding DataList}" AutoGenerateColumns="False" Margin="20"><DataGrid.Columns><DataGridTextColumn Binding="{Binding Index}" Header="序号" Width="100"/><DataGridTextColumn Binding="{Binding Name}" Header="名称" Width="200"/><DataGridTextColumn Binding="{Binding Remark}" Header="时间" Width="*"/></DataGrid.Columns></DataGrid></StackPanel>

效果:

样式四:

<Style TargetType="{x:Type DataGrid}"><Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/><Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/><Setter Property="BorderBrush" Value="#FF688CAF"/><Setter Property="BorderThickness" Value="1"/><Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected"/><Setter Property="ScrollViewer.CanContentScroll" Value="true"/><Setter Property="ScrollViewer.PanningMode" Value="Both"/><Setter Property="Stylus.IsFlicksEnabled" Value="False"/><Setter Property="AutoGenerateColumns" Value="False"/><Setter Property="ColumnHeaderHeight" Value="50"/><Setter Property="FontSize" Value="20"/><Setter Property="RowHeight" Value="50"/><Setter Property="AlternationCount" Value="2"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type DataGrid}"><Grid><Border Background="White" CornerRadius="0"><Border.Effect><DropShadowEffect ShadowDepth="0" Direction="0" Color="#FFDADADA"/></Border.Effect></Border><Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True"><ScrollViewer x:Name="DG_ScrollViewer" Focusable="false"><ScrollViewer.Template><ControlTemplate TargetType="{x:Type ScrollViewer}"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions><Grid Background="White" Grid.Column="1"><Grid.Effect><DropShadowEffect Direction="270" Color="#FFF3F3F3"/></Grid.Effect></Grid><Button Command="{x:Static DataGrid.SelectAllCommand}" Focusable="false" Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/><DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/><ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" Grid.ColumnSpan="2" Grid.Row="1"/><ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Grid.Row="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/><Grid Grid.Column="1" Grid.Row="2"><Grid.ColumnDefinitions><ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/></Grid></Grid></ControlTemplate></ScrollViewer.Template><ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/></ScrollViewer></Border></Grid></ControlTemplate></Setter.Value></Setter><Style.Triggers><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsGrouping" Value="true"/><Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/></MultiTrigger.Conditions><Setter Property="ScrollViewer.CanContentScroll" Value="false"/></MultiTrigger></Style.Triggers></Style><Style TargetType="DataGridColumnHeader"><Setter Property="Background" Value="Transparent"/><Setter Property="VerticalContentAlignment" Value="Center"/><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridColumnHeader"><Grid Background="{TemplateBinding Background}"><!--<Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition Width="20"/></Grid.ColumnDefinitions>--><ContentPresenter Margin="20 0 0 0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/><!--<TextBlock Grid.Column="1" x:Name="SortArrow" Visibility="Visible"   VerticalAlignment="Center" FontFamily="/DataGrid;component/Fonts/#FontAwesome"/>--></Grid><!--<ControlTemplate.Triggers><Trigger Property="SortDirection" Value="Ascending"><Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /><Setter TargetName="SortArrow" Property="Text" Value="" /></Trigger><Trigger Property="SortDirection" Value="Descending"><Setter TargetName="SortArrow" Property="Visibility" Value="Visible" /><Setter TargetName="SortArrow" Property="Text" Value="" /></Trigger></ControlTemplate.Triggers>--></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="DataGridRow"><Setter Property="Cursor" Value="Hand"/><Setter Property="Template" ><Setter.Value><ControlTemplate TargetType="DataGridRow"><Grid ><Border x:Name="border" Background="{TemplateBinding Background}" BorderThickness="1" BorderBrush="Transparent"/><DataGridCellsPresenter /></Grid><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="BorderBrush" TargetName="border"  Value="#00BCD4"/></Trigger><Trigger Property="IsSelected" Value="true"><Setter Property="BorderBrush" TargetName="border"  Value="#00BCD4"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter><Style.Triggers><Trigger Property="ItemsControl.AlternationIndex"Value="0"><Setter Property="Background" Value="#F8F9FA" /></Trigger><Trigger Property="ItemsControl.AlternationIndex"Value="1"><Setter Property="Background" Value="White" /></Trigger></Style.Triggers></Style><Style TargetType="DataGridCell"><Setter Property="Background" Value="Transparent"/><Setter Property="VerticalContentAlignment" Value="Center"/><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridCell"><Grid Background="{TemplateBinding Background}"><ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/></Grid><ControlTemplate.Triggers><Trigger Property="IsSelected" Value="true"><Setter Property="Foreground" Value="Black" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>

使用方式:

<DataGrid x:Name="grd" ItemsSource="{Binding DataList}"  Margin="20" BorderThickness="0" Background="Transparent" CanUserSortColumns="False" SelectionMode="Single" HorizontalGridLinesBrush="Black" VerticalGridLinesBrush="Black" GridLinesVisibility="None" RowDetailsVisibilityMode="Collapsed" ForceCursor="True" ><DataGrid.Columns><DataGridTextColumn Binding="{Binding Index}" Header="序号" Width="*" ClipboardContentBinding="{x:Null}"/><DataGridTextColumn Binding="{Binding Name}" Header="名称" Width="*" ClipboardContentBinding="{x:Null}"/><DataGridTextColumn Binding="{Binding Remark}" Header="时间" Width="*" ClipboardContentBinding="{x:Null}"/></DataGrid.Columns></DataGrid>

效果:

样式五:

<!--DataGrid样式--><Style TargetType="DataGrid"><Setter Property="RowHeaderWidth" Value="0"></Setter><Setter Property="AutoGenerateColumns" Value="False"></Setter><Setter Property="CanUserAddRows" Value="False"></Setter><Setter Property="CanUserResizeColumns" Value="False"></Setter><Setter Property="CanUserResizeRows" Value="False"></Setter><Setter Property="HorizontalGridLinesBrush" Value="LightGray"></Setter><Setter Property="VerticalGridLinesBrush" Value="LightGray"></Setter><Setter Property="IsReadOnly" Value="True"></Setter><Setter Property="BorderThickness" Value="1,0"></Setter><Setter Property="BorderBrush" Value="LightGray"></Setter><Setter Property="RowHeight" Value="30"></Setter><Setter Property="VerticalScrollBarVisibility" Value="Auto"></Setter></Style><!--DataGrid表头样式--><Style TargetType="DataGridColumnHeader"><Setter Property="FontSize" Value="16"></Setter><Setter Property="Background" Value="{StaticResource BgColor}"></Setter><Setter Property="BorderThickness" Value="0,0,1,1"></Setter><Setter Property="BorderBrush" Value="LightGray"></Setter><Setter Property="HorizontalContentAlignment" Value="Center"></Setter></Style><!--DataGrid复选框样式--><Style TargetType="CheckBox" x:Key="VerticalCheckBox"><Setter Property="VerticalAlignment" Value="Center"></Setter><Setter Property="FontSize" Value="16"></Setter><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type CheckBox}"><StackPanel Name="sp" HorizontalAlignment="Center" ><ContentPresenter HorizontalAlignment="Center" Margin="2"></ContentPresenter><Border x:Name="bd" BorderThickness="1.5" Height="20" Width="20" BorderBrush="Gray" ><Border.Background><LinearGradientBrush StartPoint="0,0"  EndPoint="1,1"><GradientStop Color="LightGray" Offset="0.05"/><GradientStop Color="White" Offset="1"/></LinearGradientBrush></Border.Background><Path Name="checkPath" Width="18" Height="16" Stroke="Black"  StrokeThickness="2"></Path></Border></StackPanel><ControlTemplate.Triggers><Trigger Property="IsChecked" Value="True"><Setter TargetName="checkPath" Property="Data" Value="M 1.5,5 L 7,13 17,0"></Setter></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="bd" Property="Background" Value="LightGray"></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><!--DataGrid单元格选中样式--><Style TargetType="DataGridCell"><Style.Triggers><Trigger Property="IsSelected" Value="True"><Setter Property="Background" Value="#FFC7CBCA"/><Setter Property="BorderThickness" Value="0"></Setter></Trigger></Style.Triggers></Style><!--DataGrid按钮样式 蓝--><Style x:Key="btnInfo" TargetType="Button"><Setter Property="Width" Value="70"></Setter><Setter Property="Foreground" Value="White"></Setter><Setter Property="FontSize" Value="12"></Setter><Setter Property="Margin" Value="0,2"></Setter><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border Name="bd" CornerRadius="3" BorderThickness="1" BorderBrush="LightGray" Background="#FF2F6DC1"><ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center"  /></Border><ControlTemplate.Triggers><Trigger Property="Button.IsMouseOver" Value="True"><Setter TargetName="bd" Property="Opacity" Value="0.6"></Setter></Trigger><Trigger Property="IsPressed" Value="True"><Setter TargetName="bd" Property="Background" Value="#FF9BCEF7"></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>

效果:

下面是对DataGrid控件的补充:

控件常用方法:

BeginEdit:使DataGrid进入编辑状态。

CancelEdit:取消DataGrid的编辑状态。

CollapseRowGroup:闭合DataGrid的行分组。

CommitEdit:确认DataGrid的编辑完成。

ExpandRowGroup:展开DataGrid的行分组。

GetGroupFromItem:从具体Item中得到分组。

ScrollIntoView:滚动DataGrid视图。

控件常用属性:

AlternatingRowBackground:获取或设置一个笔刷用来描绘DataGrid奇数行的背景。

AreRowDetailsFrozen:获取或设置一个值用来判断是否冻结每行内容的详细信息。

AreRowGroupHeadersFrozen:获取或设置一个值用来判断是否冻结分组行的头部。

AutoGenerateColumns:获取或设置一个值用来判断是否允许自动生成表列。

CanUserReorderColumns:获取或设置一个值用来判断是否允许用户重新排列表列的位置。

CanUserSortColumns:获取或设置一个值用来判断是否允许用户按列对表中内容进行排序。

CellStyle:获取或设置单元格的样式。

ColumnHeaderHeight:获取或设置列头的高度。

ColumnHeaderStyle:获取或设置列头的样式。

Columns:获取组件中包含所有列的集合。

ColumnWidth:获取或设置列宽。

CurrentColumn:获取或设置包含当前单元格的列。

CurrentItem:获取包含当前单元格且与行绑定的数据项。

DragIndicatorStyle:获取或设置当拖曳列头时的样式。

DropLocationIndicatorStyle:获取或设置呈现列头时的样式。

FrozenColumnCount:获取或设置冻结列的个数。

GridLinesVisibility:获取或设置网格线的显示形式。

HeadersVisibility:获取或设置行头及列头的显示形式。

HorizontalGridLinesBrush:获取或设置水平网格线的笔刷。

HorizontalScrollBarVisibility:获取或设置水平滚动条的显示样式。

IsReadOnly:获取或设置DataGrid是否为只读。

MaxColumnWidth:获取或设置DataGrid的最大列宽。

MinColumnWidth:获取或设置DataGrid的最小列宽。

RowBackground:获取或设置用于填充行背景的笔刷。

RowDetailsTemplate:获取或设置被用于显示行详细部分的内容的模板。

RowDetailsVisibilityMode:获取或设置一个值用以判定行详细部分是否显示。

RowGroupHeaderStyles:获取呈现行分组头部的样式。

RowHeaderStyle:获取或设置呈现行头的样式。

RowHeaderWidth:获取或设置行头的宽度。

RowHeight:获取或设置每行的高度。

RowStyle:获取或设置呈现行时的样式。

SelectedIndex:获取或设置当前选中部分的索引值。

SelectedItem:获取或设置与当前被选中行绑定的数据项。

SelectedItems:获取与当前被选中的各行绑定的数据项们的列表(List)。

SelectionMode:获取或设置DataGrid的选取模式。

VerticalGridLinesBrush:获取或设置垂直网格线的笔刷。

VerticalScrollBarVisibility:获取或设置垂直滚动条的显示样式。

原文:https://www.cnblogs.com/xiaomingg/p/8736305.html

WPF 自定义DataGrid控件样式相关推荐

  1. WPF 自定义TabControl控件样式(转)

    WPF 自定义TabControl控件样式 一.前言 程序中经常会用到TabControl控件,默认的控件样式很普通.而且样式或功能不一定符合我们的要求.比如:我们需要TabControl的标题能够居 ...

  2. WPF的DataGrid控件样式自定义

    DataGrid控件很常用,不同的软件中,设计师呈现的UI样式不一样,参考了网上一些设置,先弄个简单的吧. 第一步,创建实体model, 第二步,写一个ViewModel,生成一些显示的数据 第三步, ...

  3. WPF Calendar 日历控件 样式自定义

    原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...

  4. WPF DataGrid控件样式

    WPF DataGrid控件样式 <DataGrid ItemsSource="{Binding ProductsList}" AutoGenerateColumns=&qu ...

  5. 详解WPF 4 DataGrid控件的基本功能

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 详解WPF 4 D ...

  6. 通过WPF自定义ListBox控件实现ListBoxItem中开关及删除功能

    通过WPF自定义ListBox控件实现类似CAD图层关闭与删除功能 文章目录 通过WPF自定义ListBox控件实现类似CAD图层关闭与删除功能 前言 一.程序界面设计 二.代码部分 2.1前端代码 ...

  7. WPF之DataGrid控件使用

    WPF之DataGrid控件使用 一.DataGrid简介 二.DataGrid数据源绑定 三.DataGrid单元格编辑触发事件 四.DataGrid增加删除行 五.DataGrid数据触发器 参考 ...

  8. 有关WPF中DataGrid控件的基础应用总结

    基础说明 DataGrid是WPF提供的基础控件,它可以非常轻松的呈现出一张表格,本文章会按照从易到难的顺序依次将DataGrid的使用方法进行解说,除了MSDN上给出的最基本的例子之外,给出了三个比 ...

  9. WPF自定义动画控件 风机

    原文:WPF自定义动画控件 风机 一:创建WPF项目 二:在项目下添加文件Themes,在此文件下添加新项 "资源词典"取名为 Generic.xaml  注意大小写,之前遇到因为 ...

最新文章

  1. JavaScript工作原理(二):V8引擎和5招高效代码
  2. python输出文本-使用python输出指定格式文本的内容
  3. python常见的语法错误_python常见语法错误有什么
  4. 残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉
  5. 如何自定义Tableau 调色板
  6. 智能课程表Android版-学年学期星期的实现
  7. UITextField属性
  8. WinDbg 命令三部曲:(一)WinDbg 命令手册
  9. 主线程等待一个 无阻塞函数 死循环子线程的安全退出
  10. c/c++ 基金会(七) 功能覆盖,虚函数,纯虚函数控制
  11. ApacheCN Pandas 教程集
  12. jsp,servlet交互驱动层实现
  13. 我国首次举办工业互联网“人机对抗”竞赛 检验独创理论独有技术有效性
  14. Nginx服务器学习(一)CentOS7系统安装Nginx
  15. OpenCV保存H264视频的问题
  16. opc 接口计算机,OPC接口使用技巧
  17. 仓库管理系统c#语言代码,C#仓库管理系统+完整源代码
  18. 基于python的新闻发布系统
  19. 概率收敛、分布收敛、Lp收敛
  20. PTA不变初心数(17分)简单答案版

热门文章

  1. 游戏设计的艺术:一本透镜的书——第十七章 故事和游戏在世界里发生
  2. 数据标注有哪些类型?
  3. 企鹅号自媒体如何快速转正,企鹅号怎么过三级
  4. 直播预告|腾讯云安全2022年度产品发布会重磅来袭,四大亮点抢先看
  5. 判断正规的股票杠杆平台?五大特点请查收
  6. 连续3年!永洪科技入选“2022年度大数据解决方案top50”
  7. 一只鸟如何打乱一个人一天的节奏
  8. Linux命令之kill命令
  9. Java如何去除图片上的马赛克
  10. 新闻稿如何发布到网上?新闻稿如何投稿?