【问题标题】:Is it possible to get nested columns in WPF DataGrid?是否可以在 WPF DataGrid 中获取嵌套列?
【发布时间】:2014-09-11 05:29:21
【问题描述】:

是否可以像下图那样在 WPF DataGrid 中嵌套列?

感谢您的帮助。

【问题讨论】:

    标签: c# .net wpf datagrid


    【解决方案1】:

    这是来自Hub of Computer Tricks and Programming 的解决方案。此解决方案允许您调整嵌套列的大小。

    <Window x:Class="WpfApp2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="700">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid Width="{Binding Path=Width, ElementName=datagrid1}" HorizontalAlignment="Left">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="{Binding ElementName=Column1, Path=ActualWidth}"/>
                    <ColumnDefinition Width="{Binding ElementName=Column2, Path=ActualWidth}"/>
                    <ColumnDefinition Width="{Binding ElementName=Column3, Path=ActualWidth}"/>
                    <ColumnDefinition Width="{Binding ElementName=Column4, Path=ActualWidth}"/>
                    <ColumnDefinition Width="{Binding ElementName=Column5, Path=ActualWidth}"/>
                    <ColumnDefinition Width="{Binding ElementName=Column6, Path=ActualWidth}"/>
                    <ColumnDefinition Width="{Binding ElementName=Column7, Path=ActualWidth}"/>
                </Grid.ColumnDefinitions>
                <Border Grid.Column="1" Grid.ColumnSpan="2" BorderBrush="Gray" HorizontalAlignment="Stretch" BorderThickness="1">
                    <Label Name='Name' HorizontalContentAlignment='Stretch'>Name</Label>
                </Border>
                <Border Grid.Column="3" Grid.ColumnSpan="4" BorderBrush="Gray" HorizontalAlignment="Stretch" BorderThickness="1">
                    <Label Name='Address' HorizontalContentAlignment='Stretch'>Address</Label>
                </Border>
            </Grid>
            <DataGrid Name="datagrid1" Grid.Row="1" HorizontalAlignment="Left">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="S.No" MinWidth="80" x:Name="Column1"/>
                    <DataGridTextColumn Header="First Name" MinWidth="100" x:Name="Column2"/>
                    <DataGridTextColumn Header="Last Name" MinWidth="100" x:Name="Column3"/>
                    <DataGridTextColumn Header="Address 1" MinWidth="90" x:Name="Column4"/>
                    <DataGridTextColumn Header="Address 2" MinWidth="90" x:Name="Column5"/>
                    <DataGridTextColumn Header="City" MinWidth="90" x:Name="Column6"/>
                    <DataGridTextColumn Header="State" MinWidth="90" x:Name="Column7"/>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>
    

    【讨论】:

      【解决方案2】:
         <DataGrid ItemsSource="{Binding }" Name="dataGrid1" AutoGenerateColumns="False" 
                                ColumnHeaderHeight="50" >
                      <DataGrid.Resources>
      
                          <Style x:Key="DataGridColumnHeader" TargetType="{x:Type DataGridColumnHeader}">
                              <Setter Property="VerticalContentAlignment" Value="Center" />
                              <Setter Property="Template">
                                  <Setter.Value>
                                      <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                                          <Grid>
                                              <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
                                          </Grid>
                                      </ControlTemplate>
                                  </Setter.Value>
                              </Setter>
                          </Style>
      
                      </DataGrid.Resources>
                      <DataGrid.Columns>
                              <DataGridTextColumn  Header="Main1" Width="60" 
                                                  HeaderStyle="{StaticResource DataGridColumnHeader}">
                              <DataGridTextColumn.HeaderTemplate>
                                  <DataTemplate>
                                      <StackPanel Orientation="Vertical">
                                          <TextBlock   Width="60"/>
      
                                          <DataGridColumnHeader Content="Nested1" Width="60"/>
                                      </StackPanel>
                                  </DataTemplate>
                              </DataGridTextColumn.HeaderTemplate>
                          </DataGridTextColumn>
                          <DataGridTextColumn Header="Nested2" Width="60"
                                                   HeaderStyle="{StaticResource DataGridColumnHeader}">
                              <DataGridTextColumn.HeaderTemplate>
                                  <DataTemplate>
                                      <StackPanel Orientation="Vertical">
                                          <TextBlock FontWeight="Bold" Text="Main1"/>
      
                                          <DataGridColumnHeader Content="Nested2" Width="60" />
                                      </StackPanel>
                                  </DataTemplate>
                              </DataGridTextColumn.HeaderTemplate>
                          </DataGridTextColumn>
                          <DataGridTextColumn Width="60"
                                                   HeaderStyle="{StaticResource DataGridColumnHeader}">
                              <DataGridTextColumn.HeaderTemplate>
                                  <DataTemplate>
                                      <StackPanel Orientation="Vertical">
                                          <TextBlock />
      
                                          <DataGridColumnHeader Content="Nested3" Width="60"/>
                                      </StackPanel>
                                  </DataTemplate>
                              </DataGridTextColumn.HeaderTemplate>
                          </DataGridTextColumn>
                      </DataGrid.Columns>
                  </DataGrid>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 2019-09-01
        • 2015-05-05
        • 1970-01-01
        • 2017-08-05
        相关资源
        最近更新 更多