wpf中datagrid表头合并(拆分)

本文分享了一种在 WPF 中使用 DataGrid 实现列合并的方法,通过重写列模板来达到视觉上的合并效果,并提供了详细的 XAML 代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是小小张,这是人生20年的第一次博客,写的不好请大家指正,并且因为是工作时间很短,可能未必有大家理解的深刻,有什么问题欢迎大家指正;

    好了,正式开始,首先我要说明,我这里所说的是视觉上的合并,就像是这样的,在视觉上像是合并了行列,其实并不是按照你们想的去做的,好吧,我表示并不知道你想的是啥,哈哈哈。

 

不开玩笑,方法是很简单的,在datagrid的列中,重写这一列的模板,在模板中重新布局就好啦。这个方法我说下自己遇到的问题:

1,注意上面图片的红色框部分是重写一列的模板得来的,所以实质上还是一列;

2,因此需要重写这一列的表头和下面显示部分,包括横线和纵向的线条哦;

现在就贴出代码供大家参考

  <DataGrid  Name="OverDateGrid" Style="{DynamicResource New_Default_DataGrid}"  PreviewMouseLeftButtonDown="OverDateGrid_PreviewMouseLeftButtonDown"
                           LoadingRow="OverDateGrid_LoadingRow" CellEditEnding="OverDateGrid_CellEditEnding" ItemsSource="{Binding OverallConstructionPlanList}"
                           Margin="0 18 0 0">

            <DataGrid.Columns>
                        <!--单选多选-->
                        <DataGridTemplateColumn Width="26" IsReadOnly="True" HeaderStyle="{DynamicResource DataGridColumnHeader_Style1}">
                            <DataGridTemplateColumn.HeaderTemplate>
                                <DataTemplate>
                                    <CheckBox Name="checkall" Initialized="checkall_Initialized" Click="checkall_Click"></CheckBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.HeaderTemplate>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox Name="checkBox" IsChecked="{Binding IsChecked}" VerticalAlignment="Center" HorizontalAlignment="Center" Click="checkBox_Click"></CheckBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                        <!--序号-->
                <DataGridTemplateColumn Header="{DynamicResource langNumber}" Width="60">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock TextWrapping="Wrap" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}, Path=Header}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                        <DataGridTemplateColumn  Header="隧道名称" Width="100">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock
                                      Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}" ></TextBlock>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                            <DataGridTemplateColumn.CellEditingTemplate>
                                <DataTemplate>
                                    <ComboBox    Style="{DynamicResource SysComboBox}"   
                                      ItemsSource="{Binding ElementName=OverDateGrid,Path=DataContext.StucturesEntLists}"
                                      DisplayMemberPath="StuctureName" SelectionChanged="ComboBox_SelectionChanged"
                                      Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}" ></ComboBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellEditingTemplate>
                        </DataGridTemplateColumn>

                        <DataGridTextColumn Width="100" Header="单位" Binding="{Binding Unit,UpdateSourceTrigger=PropertyChanged}" ></DataGridTextColumn>
                        <DataGridTextColumn Width="100"  Header="计划进尺"  Binding="{Binding DesignQuantity,UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
                        <!--<DataGridTextColumn Width="100" Header="变更后数量" Binding="{Binding QuantityAfterChange,UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>-->
                        <!--这里,看我看我,从这里开始写的哦,这里开始的-->
                        <DataGridTemplateColumn Width="600" CellStyle="{DynamicResource CellStyle_HeaderHB}">
                            <DataGridTemplateColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="DataGridColumnHeader">
                                                <Grid>
                                                    <Grid.RowDefinitions>
                                                        <RowDefinition Height="*"></RowDefinition>
                                                        <RowDefinition Height="1"></RowDefinition>
                                                        <RowDefinition Height="*"></RowDefinition>
                                                    </Grid.RowDefinitions>
                                                    <Grid.ColumnDefinitions>
                                                        <ColumnDefinition Width="1"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                    </Grid.ColumnDefinitions>
                                                    <Border Background="#cccccc" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="5" ></Border>
                                                    <Border Background="#cccccc" Grid.Column="0" Grid.Row="0"  Grid.RowSpan="3" Width="1" ></Border>
                                                    <Label  HorizontalContentAlignment="Center" Content="剩余工程工期节点" Grid.ColumnSpan="4" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="1" Grid.Row="2" Content="{DynamicResource langProjectDepartmentPlanStartTime}" BorderBrush="#cccccc" BorderThickness="0,0,1,0" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="2" Grid.Row="2" Content="{DynamicResource langProjectDepartmentFinishedTime}" BorderBrush="#cccccc" BorderThickness="0,0,1,0" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="3" Grid.Row="2" Content="业主要求开始时间"   BorderBrush="#cccccc" BorderThickness="0,0,1,0" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="4" Grid.Row="2" Content="业主要求完成时间"  FontSize="14" FontWeight="Bold" SnapsToDevicePixels="True"></Label>
                                                </Grid>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </DataGridTemplateColumn.HeaderStyle>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <UniformGrid Columns="4" Background="Transparent">
                                        <Border Padding="0"  BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ProjectDepartmentPlanStartTime,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ProjectPlanningFinishTime,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding OwnerRequestToStart,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding OwnerRequestsCompletionTime,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                    </UniformGrid>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                            <DataGridTemplateColumn.CellEditingTemplate>
                                <DataTemplate>
                                    <UniformGrid Columns="4">
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="1,0,1,0">
                                            <Grid>
                                                <!--<TextBlock Name="l1"   Background="Transparent" Grid.Column="0" Text="{Binding Name}"></TextBlock>-->
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                                SelectedDateChanged="DatePicker_SelectedDateChanged"
                                    SelectedDate="{Binding ProjectDepartmentPlanStartTime,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                            </Grid>
                                        </Border>
                                        <Border Padding="0">
                                            <Grid>
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                                            SelectedDateChanged="DatePicker_SelectedDateChanged_1"
                                    SelectedDate="{Binding ProjectPlanningFinishTime,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                                <!--<TextBlock Name="l2"  Background="Transparent" Grid.Column="0" Text="{Binding Age}"></TextBlock>-->
                                            </Grid>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <Grid>
                                                <!--<TextBlock Name="l1"   Background="Transparent" Grid.Column="0" Text="{Binding Name}"></TextBlock>-->
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                                            SelectedDateChanged="DatePicker_SelectedDateChanged_2"
                                    SelectedDate="{Binding OwnerRequestToStart,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                            </Grid>
                                        </Border>
                                        <Border Padding="0">
                                            <Grid>
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                    SelectedDateChanged="DatePicker_SelectedDateChanged_3"
                                                            SelectedDate="{Binding OwnerRequestsCompletionTime,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                                <!--<TextBlock Name="l2"  Background="Transparent" Grid.Column="0" Text="{Binding Age}"></TextBlock>-->
                                            </Grid>
                                        </Border>
                                    </UniformGrid>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellEditingTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTextColumn Width="100" Header="进度指标" Binding="{Binding SchedulePerformedIndex,UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid> <!--这里,看我看我,从这里开始写的哦,这里开始的-->
                        <DataGridTemplateColumn Width="600" CellStyle="{DynamicResource CellStyle_HeaderHB}">
                            <DataGridTemplateColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="DataGridColumnHeader">
                                                <Grid>
                                                    <Grid.RowDefinitions>
                                                        <RowDefinition Height="*"></RowDefinition>
                                                        <RowDefinition Height="1"></RowDefinition>
                                                        <RowDefinition Height="*"></RowDefinition>
                                                    </Grid.RowDefinitions>
                                                    <Grid.ColumnDefinitions>
                                                        <ColumnDefinition Width="1"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                                    </Grid.ColumnDefinitions>
                                                    <Border Background="#cccccc" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="5" ></Border>
                                                    <Border Background="#cccccc" Grid.Column="0" Grid.Row="0"  Grid.RowSpan="3" Width="1" ></Border>
                                                    <Label  HorizontalContentAlignment="Center" Content="剩余工程工期节点" Grid.ColumnSpan="4" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="1" Grid.Row="2" Content="{DynamicResource langProjectDepartmentPlanStartTime}" BorderBrush="#cccccc" BorderThickness="0,0,1,0" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="2" Grid.Row="2" Content="{DynamicResource langProjectDepartmentFinishedTime}" BorderBrush="#cccccc" BorderThickness="0,0,1,0" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="3" Grid.Row="2" Content="业主要求开始时间"   BorderBrush="#cccccc" BorderThickness="0,0,1,0" FontSize="14" FontWeight="SemiBold" SnapsToDevicePixels="True"></Label>
                                                    <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Grid.Column="4" Grid.Row="2" Content="业主要求完成时间"  FontSize="14" FontWeight="Bold" SnapsToDevicePixels="True"></Label>
                                                </Grid>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </DataGridTemplateColumn.HeaderStyle>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <UniformGrid Columns="4" Background="Transparent">
                                        <Border Padding="0"  BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ProjectDepartmentPlanStartTime,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ProjectPlanningFinishTime,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding OwnerRequestToStart,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding OwnerRequestsCompletionTime,StringFormat='{}{0:yyyy年MM月dd日}',UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                        </Border>
                                    </UniformGrid>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                            <DataGridTemplateColumn.CellEditingTemplate>
                                <DataTemplate>
                                    <UniformGrid Columns="4">
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="1,0,1,0">
                                            <Grid>
                                                <!--<TextBlock Name="l1"   Background="Transparent" Grid.Column="0" Text="{Binding Name}"></TextBlock>-->
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                                SelectedDateChanged="DatePicker_SelectedDateChanged"
                                    SelectedDate="{Binding ProjectDepartmentPlanStartTime,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                            </Grid>
                                        </Border>
                                        <Border Padding="0">
                                            <Grid>
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                                            SelectedDateChanged="DatePicker_SelectedDateChanged_1"
                                    SelectedDate="{Binding ProjectPlanningFinishTime,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                                <!--<TextBlock Name="l2"  Background="Transparent" Grid.Column="0" Text="{Binding Age}"></TextBlock>-->
                                            </Grid>
                                        </Border>
                                        <Border Padding="0" BorderBrush="{DynamicResource Color_Border}" BorderThickness="0,0,1,0">
                                            <Grid>
                                                <!--<TextBlock Name="l1"   Background="Transparent" Grid.Column="0" Text="{Binding Name}"></TextBlock>-->
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                                            SelectedDateChanged="DatePicker_SelectedDateChanged_2"
                                    SelectedDate="{Binding OwnerRequestToStart,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                            </Grid>
                                        </Border>
                                        <Border Padding="0">
                                            <Grid>
                                                <DatePicker Background="Transparent" Grid.Column="0" IsTodayHighlighted="True"    SelectedDateFormat="Long"   VerticalContentAlignment="Center"
                                    SelectedDateChanged="DatePicker_SelectedDateChanged_3"
                                                            SelectedDate="{Binding OwnerRequestsCompletionTime,UpdateSourceTrigger=PropertyChanged}"></DatePicker>
                                                <!--<TextBlock Name="l2"  Background="Transparent" Grid.Column="0" Text="{Binding Age}"></TextBlock>-->
                                            </Grid>
                                        </Border>
                                    </UniformGrid>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellEditingTemplate>
                        </DataGridTemplateColumn>
                        <DataGridTextColumn Width="100" Header="进度指标" Binding="{Binding SchedulePerformedIndex,UpdateSourceTrigger=PropertyChanged}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>

小白的我写下来,一是跟大家分享,二也是记录下自己东西,所以有什么大神欢迎指导,接受指导,不接受骂人哦

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值