WPF DataGrid自定义列布局:实现列堆叠是否可行?
WPF DataGrid 实现自定义列堆叠效果(仿Infragistics垂直列布局)
完全可以实现,不用依赖第三方控件,用WPF自带的DataGridTemplateColumn就能自定义列的表头和单元格内容,把多个字段垂直堆叠在同一列里。你写的代码已经找对了方向,下面是整理后的完整实现方案:
一、XAML布局实现
用DataGridTemplateColumn自定义堆叠列,表头用StackPanel做垂直分组,单元格里同样用StackPanel把多个字段垂直排列:
<Grid> <DataGrid x:Name="dataGrid" AutoGenerateColumns="False"> <!-- 可选:统一列头样式 --> <DataGrid.Resources> <Style TargetType="DataGridColumnHeader"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="DataGridColumnHeader"> <Grid> <TextBlock Text="{Binding}" FontWeight="Bold" /> <ContentPresenter /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </DataGrid.Resources> <DataGrid.Columns> <!-- 普通文本列 --> <DataGridTextColumn Header="ID" Binding="{Binding Id}" /> <!-- 堆叠列:包含两个垂直排列的字段 --> <DataGridTemplateColumn> <DataGridTemplateColumn.Header> <StackPanel> <TextBlock Text="姓名组" FontWeight="Bold" /> <TextBlock Text="本名" /> <TextBlock Text="姓氏" /> </StackPanel> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Margin="4,2"> <TextBlock Text="{Binding PrimaryName}" /> <TextBlock Text="{Binding SecondaryName}" /> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <!-- 普通文本列 --> <DataGridTextColumn Header="年龄" Binding="{Binding Age}" /> </DataGrid.Columns> </DataGrid> </Grid>
二、后台代码与数据实体
数据实体类
public class MyData { public int Id { get; set; } public string PrimaryName { get; set; } public string SecondaryName { get; set; } public int Age { get; set; } }
窗口后台绑定数据
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); LoadDataGrid(); } private void LoadDataGrid() { var data = new List<MyData> { new MyData { Id = 1, PrimaryName = "约翰", SecondaryName = "多伊", Age = 25 }, new MyData { Id = 2, PrimaryName = "简", SecondaryName = "多伊", Age = 30 }, new MyData { Id = 3, PrimaryName = "萨姆", SecondaryName = "史密斯", Age = 35 } }; dataGrid.ItemsSource = data; } }
核心要点
- 表头的垂直分组:通过
DataGridTemplateColumn.Header里的StackPanel实现多行表头文字的垂直排列。 - 单元格的垂直堆叠:在
CellTemplate的DataTemplate中用StackPanel把多个绑定字段上下排列,实现一列容纳多段内容的效果。 - 可扩展:如果需要加分隔线、调整对齐方式或者更复杂的样式,直接在
StackPanel里加元素或修改属性就行。
内容的提问来源于stack exchange,提问作者NicLight93
相关产品推荐
相关产品推荐

