将数据网格的列标题与分组按钮对齐

本文关键字:按钮 对齐 标题 数据 数据网 网格 | 更新日期: 2023-09-27 18:22:12

我的要求是根据条件对数据网格行进行分组,并以交替的颜色显示分组后的行,同时为每组显示一个编辑按钮。这里的问题是我的数据网格列标题与数据网格数据行不对齐。当前电网

我已经读了很多文章,但没有太多帮助。我也尝试过这篇文章WPF DataGrid GroupStyle。这个例子有一个网格的组样式,但我试着对数据网格也这样做。

当前XAML

    <Window x:Class="TimeSeriesDataGrid.View.TimeSeriesView"
             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" 
             mc:Ignorable="d" Width="Auto" Height="Auto"
             xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
             xmlns:viewmodel="clr-namespace:TimeSeriesDataGrid.ViewModel"
             xmlns:converter="clr-namespace:TimeSeriesDataGrid.Converters"
             xmlns:local="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45"
             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45"
             xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" Title="{Binding WindowTitle}" ResizeMode="CanMinimize">
    <Window.DataContext>
        <viewmodel:TimeSeriesViewModel />
    </Window.DataContext>
    <Window.Background>
        <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
            <GradientStop Color="Black" Offset="1"/>
            <GradientStop Color="#FFEEEFFF" Offset="0.836"/>
        </LinearGradientBrush>
    </Window.Background>
    <Window.Resources>
        <converter:RowColorConverter x:Key="RowColorConverter" />
        <CollectionViewSource x:Key="TimeSeriesCollectionViewSource"  CollectionViewType="ListCollectionView" Source="{Binding GetTimeSeries}" >
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="DocumentId"/>
            </CollectionViewSource.GroupDescriptions>
          </CollectionViewSource>
   </Window.Resources>
    <Grid Margin="0,0,0,-3">
        <Grid.RowDefinitions>
            <RowDefinition Height="8*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <DataGrid  
            DataContext="{StaticResource TimeSeriesCollectionViewSource}" 
            SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedTimeSeries}"  
            ItemsSource="{Binding}"  
            CanUserReorderColumns="False" 
            SnapsToDevicePixels="True" 
            Grid.Column="0" 
            Grid.Row="0" 
            x:Name="dg_TimeSeriesEdit" 
            AutoGenerateColumns="False" 
            CanUserResizeColumns="False" 
            ScrollViewer.IsDeferredScrollingEnabled="True" 
            VirtualizingStackPanel.IsVirtualizing="true" 
            HeadersVisibility="Column" 
            HorizontalContentAlignment="Center" 
            CanUserAddRows="False" 
            CanUserDeleteRows="False" 
            MaxHeight="800" 
            MaxWidth="2550" 
            HorizontalGridLinesBrush="#FFC92222" 
            VerticalGridLinesBrush="#FFC92222" 
            Width="Auto" 
            Height="Auto" >
              <DataGrid.GroupStyle>
                <GroupStyle AlternationCount="2" >
                     <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                                            <StackPanel Orientation="Vertical"  VerticalAlignment="Center"  Background="Transparent">
                                                <Button Grid.Column="0" BorderThickness="0" Content="Edit" Margin="0,0,0,5" Height="Auto" Width="50" >
                                                    <i:Interaction.Triggers>
                                                        <i:EventTrigger EventName="Click">
                                                            <local:EventToCommand Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.EditGroupCmd}" CommandParameter="{Binding Path=Items}" PassEventArgsToCommand="True" />
                                                        </i:EventTrigger>
                                                    </i:Interaction.Triggers>
                                                </Button>
                                            </StackPanel>
                                            <ItemsPresenter />
                                        </StackPanel>             
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle>
           <DataGrid.RowStyle>           
            <Style>
                    <Setter Property="DataGridRow.Background" 
                            Value="{Binding RelativeSource={RelativeSource AncestorType=GroupItem}, 
                        Path=(ItemsControl.AlternationIndex), Converter={StaticResource RowColorConverter}}"/>
                </Style>
            </DataGrid.RowStyle>
            <DataGrid.Columns >
                .
                .
            </DataGrid.Columns>
        </DataGrid>
        </Grid>
    </Grid>
</Window>

如有任何帮助,我们将不胜感激。

将数据网格的列标题与分组按钮对齐

我在datagridcolumn标头上用TranslateTransform后的数据对标头进行了联合

 <DataGrid.ColumnHeaderStyle>
            <Style TargetType="DataGridColumnHeader">
                <Setter Property="RenderTransform">
                    <Setter.Value>
                        <TranslateTransform X="50"></TranslateTransform>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.ColumnHeaderStyle>
        <DataGrid.RowValidationErrorTemplate>