C# 在DataGrid-WPF的顶部添加自定义行

C# 在DataGrid-WPF的顶部添加自定义行,c#,wpf,xaml,C#,Wpf,Xaml,我是WPF的新手,我有一个项目需要在下面有这个输出 我该怎么做?我只知道一个基本的DataGrid代码,如下所示: <DataGrid AutoGenerateColumns="False" Name="myGrid" Margin="10"> <DataGrid.RowHeaderTe

我是WPF的新手,我有一个项目需要在下面有这个输出

我该怎么做?我只知道一个基本的DataGrid代码,如下所示:

                              <DataGrid AutoGenerateColumns="False" Name="myGrid" Margin="10">
                                    <DataGrid.RowHeaderTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Item.Header}"/>
                                        </DataTemplate>
                                    </DataGrid.RowHeaderTemplate>
                                    <DataGrid.Columns>
                                        <DataGridTextColumn Header="Case Title" Binding="{Binding Path=Name}"  Width="160" />
                                        <DataGridComboBoxColumn Width="100" x:Name="dtgCbxColUnit" SelectedValueBinding="{Binding Unit, Mode=TwoWay}" DisplayMemberPath="{Binding Unit}" />
                                        <DataGridTextColumn Header="Case 1" Binding="{Binding Path=Case1}" Width="80"/>
                                        <DataGridTextColumn Header="Case 2" Binding="{Binding Path=Case2}" Width="80" />
                                        <DataGridTextColumn Header="Case 3" Binding="{Binding Path=Case3}" Width="80" />
                                        <DataGridTextColumn Header="Case 4" Binding="{Binding Path=Case4}" Width="80" />
                                        <DataGridTextColumn Header="Case 5" Binding="{Binding Path=Case5}" Width="80" />
                                        <DataGridTextColumn Header="Case 6" Binding="{Binding Path=Case6}" Width="80" />
                                    </DataGrid.Columns>
                             </DataGrid>



如何解决此问题?

DataGrid单元格模板是垂直(按列)而不是水平(按行)完成的。这意味着您不能对几行进行例外。如果想要自定义行,则必须使用
DataGridTemplateColumn

<DataGrid.Columns>
    <DataGridTemplateColumn Header="People">
        <DataGridTemplateColumn.CellStyle>
            <Style TargetType="DataGridCell">
                <!-- normal template -->
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <TextBlock Text="{Binding A}" Background="Green"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RowType}" Value="0">
                        <Setter Property="Template">
                            <Setter.Value>
                                <!-- first extra template -->
                                <ControlTemplate>
                                    <TextBlock Text="{Binding A}"/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding RowType}" Value="1">
                        <Setter Property="Template">
                            <Setter.Value>
                                <!-- second extra template -->
                                <ControlTemplate>
                                    <CheckBox Content="{Binding A}"/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGridTemplateColumn.CellStyle>
    </DataGridTemplateColumn>
</DataGrid.Columns>
综合结果:

通常情况下,如果您认为这些定制将来会增长,我建议您使用自己的general
ItemsControl
实现


还有另一种解决方法,您可以在网格顶部创建一个间隙,并使用
画布
或任何带有
cliptobunds=False
explained的控件将内容覆盖到该间隙上

看起来更像左侧的1个标题列,而不是2个标题。列为行的旋转数据网格
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <DataTrigger Binding="{Binding RowType}" Value="0">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Button Content="{Binding A}"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>