WPF 学生成绩管理工具开发笔记(9)-- DataGrid多层合并表头

本文记录了使用WPF开发学生成绩管理工具时,如何实现DataGrid的多层合并表头效果,通过XAML代码进行详细说明。
摘要由CSDN通过智能技术生成

表头效果如下图

表头实现

主要依靠xaml代码实现

<UserControl x:Class="ScoreTools.Views.UcClassInfo"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:ScoreTools.Views"
             xmlns:c="clr-namespace:ScoreTools.CustomControl"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800" Background="Gainsboro" Name="ClassCoreWin">
    <UserControl.Resources>
        
        <LinearGradientBrush x:Key="DataGridHeaderBackGround" EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFC8FFC8" Offset="1" />
            <GradientStop Color="#FF64FF64" Offset="0" />
        </LinearGradientBrush>

        <!-- Column header style -->
        <Style x:Key="C1ColumnHeader" TargetType="DataGridColumnHeadersPresenter">
            <Setter Property="Background" Value="{StaticResource DataGridHeaderBackGround}"/>
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="Foreground" Value="Red"/>
        </Style>

    </UserControl.Resources>
    
    
    <Grid Margin="5" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"   FontSize="18">班级列表</TextBlock>
        <UniformGrid Columns="2" Grid.Row="0" Grid.Column="1">
            <TextBlock Text="{Binding Path=StudentScores.Count,  StringFormat='本班共有学生{0}人'}"  FontSize="14" Foreground="Red"  Margin="10 0 0 0" ></TextBlock>
            <c:FButton FIcon="&#xe605;" Command="{Binding DatagridViewToExcelCommand}" CommandParameter="{Binding ElementName=classGrid}" HorizontalAlignment="Right">
                导出至Excel</c:FButton>
        </UniformGrid>
        
        
        <ListBox x:Name="lstBoxClass" Width="150" Grid.Row="1" ItemsSource="{Binding StuClassList}" Padding="5" >
            <!--鼠标左键双击-->
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border CornerRadius="0" Margin="2" BorderBrush="Black"  BorderThickness="0,0,0,0.2"  >
                        <Grid  >
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Image Width="25" Grid.Column="0" Opacity="0.8"   Source="/StudentMS;component/Resources/w128x1187122.t.ico"></Image>
                            <TextBlock Grid.Column="1" Padding="3" Margin="10,0,0,0" Text="{Binding  Path=StuClassName}" ToolTip="鼠标左键双击,浏览本班级!">
                                <TextBlock.InputBindings>
                                    <MouseBinding Command="{Binding DataContext.SelectListBoxItemCommand,
                                        ElementName=ClassCoreWin}" 
                                              CommandParameter="{Binding ElementName=lstBoxClass}"  
                                              MouseAction="LeftDoubleClick"></MouseBinding>
                                </TextBlock.InputBindings>
                            </TextBlock>
                        </Grid>

                    </Border>

                </DataTemplate>
            </ListBox.ItemTemplate>

        </ListBox>
      
        <DataGrid x:Name="classGrid" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding StudentScores}" 
                  AutoGenerateColumns="False" CanUserAddRows="False"
                  CellStyle="{StaticResource DataGridCellStyle1}"
                  ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle1}" IsReadOnly="True">
            
            <DataGrid.Columns>
                <DataGridTextColumn Header="编号" Binding="{Binding 编号}" ></DataGridTextColumn>
                <DataGridTextColumn Header="姓名" Binding="{Binding 姓名}" ></DataGridTextColumn>
                <DataGridTextColumn Header="校名次" Binding="{Binding 校名次}" ></DataGridTextColumn>
                <DataGridTextColumn Header="班名次" Binding="{Binding 班名次}" ></DataGridTextColumn>
                
                <!--语文及排名-->
                <DataGridTemplateColumn Width="100" CellStyle="{x:Null}" IsReadOnly="True">
                    <DataGridTemplateColumn.HeaderStyle>
                        <Style TargetType="DataGridColumnHeader">
                            <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="DataGridColumnHeader">
                                        <Grid  >
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="1*"></RowDefinition>
                                                <RowDefinition Height="1*"></RowDefinition>
                                            </Grid.RowDefinitions>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="1*"></ColumnDefinition>
                                                <ColumnDefinition Width="1*"></ColumnDefinition>
                                            </Grid.ColumnDefinitions>

                                            <Label HorizontalContentAlignment="Center" Grid.Column="0" Grid.Row="0" Content="语文"  Grid.ColumnSpan="2" BorderBrush="#cccccc" BorderThickness="0,0,1,1" SnapsToDevicePixels="True"/>
                                            <Label HorizontalContentAlignment="Center" Grid.Column="0" Grid.Row="2" Content="分数"  BorderBrush="#cccccc" BorderThickness="0,0,1,0" SnapsToDevicePixels="True"/>
                                            <Label HorizontalContentAlignment="Center" Grid.Column="1" Grid.Row="2" Content="排名"  BorderBrush="#cccccc" BorderThickness="0,0,1,0" SnapsToDevicePixels="True"/>
                        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值