生活随笔
收集整理的這篇文章主要介紹了
WPF Datagrid合并表头的思路
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在使用datagrid的時候,有很多情況下,都需要合并表頭,多行表頭之類的操作。這就需要我們自定義列了。
本文給出一個思路,可以實現(xiàn)此需要,只是本人對這個研究不很明白,只是只是實現(xiàn),僅此而已。
下面是效果圖:
下面就看看代碼:
直接在MainWindow實現(xiàn):
<Window x:Class="wpfcore.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpfcore" xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"mc:Ignorable="d"Background="LightBlue"UseLayoutRounding="True"Title="MainWindow" Width="600" Height="340"><Grid><DataGrid ItemsSource="{Binding Students}" AutoGenerateColumns="False" GridLinesVisibility="All" FontSize="18"HorizontalGridLinesBrush="Red" VerticalGridLinesBrush="Red" ColumnHeaderHeight="60"><DataGrid.Columns><DataGridTemplateColumn Width="150"><DataGridTemplateColumn.HeaderStyle><Style TargetType="DataGridColumnHeader"><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="Height" Value="60"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridColumnHeader"><Border Grid.Column="0" Grid.Row="1" BorderBrush="Red" BorderThickness="1"><TextBlock Text="姓名" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border></ControlTemplate></Setter.Value></Setter>
</Style></DataGridTemplateColumn.HeaderStyle><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlock Grid.Column="0" Text="{Binding Name}" HorizontalAlignment="Center" VerticalAlignment="Center"/></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="150"><DataGridTemplateColumn.HeaderStyle><Style TargetType="DataGridColumnHeader"><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="Height" Value="60"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridColumnHeader"><Border Grid.Column="0" Grid.Row="1" BorderBrush="Red" BorderThickness="0 1 1 1"><TextBlock Text="年齡" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border></ControlTemplate></Setter.Value></Setter>
</Style></DataGridTemplateColumn.HeaderStyle><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlock Grid.Column="0" Text="{Binding Age}" HorizontalAlignment="Center" VerticalAlignment="Center"/></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn x:Name="baseInfoColumn" Width="150"><DataGridTemplateColumn.HeaderStyle><Style TargetType="DataGridColumnHeader"><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="Height" Value="60"/><Setter Property="VerticalAlignment" Value="Top"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridColumnHeader"><Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions> <Border Grid.Column="0" Grid.ColumnSpan="3" BorderBrush="Red" BorderThickness="0 1 1 0"><TextBlockHorizontalAlignment="Center" VerticalAlignment="Center"Text="基本信息"/></Border><Border Grid.Column="0" Grid.Row="1" BorderBrush="Red" BorderThickness="0 1 1 1"><TextBlock Text="身高" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border><Border Grid.Column="1" Grid.Row="1" BorderBrush="Red" BorderThickness="0 1 1 1"><TextBlock Text="體重" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border><Border Grid.Column="2" Grid.Row="1" BorderBrush="Red" BorderThickness="0 1 1 1"><TextBlock Text="性別" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border></Grid></ControlTemplate></Setter.Value></Setter>
</Style></DataGridTemplateColumn.HeaderStyle><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock Grid.Column="0" Text="{Binding Stature}" HorizontalAlignment="Center" VerticalAlignment="Center"/><TextBlock Grid.Column="1" Text="{Binding Weight}" HorizontalAlignment="Center" VerticalAlignment="Center"/><TextBlock Grid.Column="2" Text="{Binding Gender}" HorizontalAlignment="Center" VerticalAlignment="Center"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="150"><DataGridTemplateColumn.HeaderStyle><Style TargetType="DataGridColumnHeader"><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="Height" Value="60"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="DataGridColumnHeader"><Border Grid.Column="0" Grid.Row="1" BorderBrush="Red" BorderThickness="0 1 1 1"><TextBlock Text="年齡" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border></ControlTemplate></Setter.Value></Setter>
</Style></DataGridTemplateColumn.HeaderStyle><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlock Grid.Column="0" Text="{Binding Age}" HorizontalAlignment="Center" VerticalAlignment="Center"/></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid></Grid>
</Window>
MainWindow.cs,定義了三行數(shù)據(jù)的VM:
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Input;namespace wpfcore
{public partial class MainWindow : Window{public ObservableCollection<Student> Students { get; set; } = new ObservableCollection<Student>();public MainWindow(){InitializeComponent();Students.Add(new Student(){Name="張三",Age=18,Stature=188,Weight=95,Gender="男"});Students.Add(new Student(){Name = "李四",Age = 18,Stature = 188,Weight = 95,Gender = "男"});Students.Add(new Student(){Name = "小紅",Age = 18,Stature = 188,Weight = 95,Gender = "男"});DataContext = this;}???}public class Student{public string Name { get; set; }public int Age { get; set; }public int Stature { get; set; }public int Weight { get; set; }public?string?Gender?{?get;?set;?}}
}
OK,全部代碼就是這樣,思路就是使用DataGridTemplateColumn,需要合并的時候,就定義一個,然后在每個列再分出多列,綁定的數(shù)據(jù)還是原來的row的數(shù)據(jù)。這樣就能拐著彎實現(xiàn)合并表頭了。。。
如果喜歡,點個贊唄~
總結(jié)
以上是生活随笔為你收集整理的WPF Datagrid合并表头的思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。