如何让DataTemplate填充DataGridTemplateColumn

时间:2015-07-27 10:55:11

标签: wpf

我有以下用于创建数据网格的XAML:

<DataGrid CanUserAddRows="False" HorizontalAlignment="Left" Name="Test" AutoGenerateColumns="False" Height="164" Margin="205,264,0,0" VerticalAlignment="Top" Width="511">
        <DataGrid.Columns>
            <DataGridTextColumn CanUserSort="False" Binding="{Binding Description, Mode=TwoWay}" Header="Description" Width="6*" IsReadOnly="True" />
            <DataGridTemplateColumn Width="2.6*" x:Name="Parent" >
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate >
                        <Grid ShowGridLines="False" Width="{Binding ElementName=Parent,Path=Width}" >
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="1*" />
                                <ColumnDefinition Width="1*" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="Initial " Grid.Column="0" />
                            <TextBlock Text="Date " Grid.Column="1"  />
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>                           



                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridCheckBoxColumn CanUserSort="False" Binding="{Binding StepComplete, Mode=TwoWay}" Header="Completed" Width="1.5*" IsReadOnly="True" />
        </DataGrid.Columns>
    </DataGrid>

我已经创建了一个带有DataTemplate的DataGridTemplateColumn.HeaderTemplate,因为我想创建一个多标题列。我的问题是我无法让DataTemplate拉伸/填充其父单元格。我在下面添加了一张图片来展示我的问题。请注意初始日期文本周围突出显示的区域,因为这是DataTemplate边框。有谁知道如何更改DataTemplate以填充其父单元格?

谢谢Callum

enter image description here

1 个答案:

答案 0 :(得分:2)

要设置标题单元格对齐,您必须使用ColumnHeaderStyle:

<DataGrid.ColumnHeaderStyle>
    <Style TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="FontWeight"  Value="Bold" />
        <Setter Property="HorizontalAlignment" Value="Stretch" />
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</DataGrid.ColumnHeaderStyle>

我在您的代码中看到两个问题:

  1. 您正尝试将Grid.Width属性(double)绑定到DataGridTemplateColumn.Width属性,其值为2.6*(DataGridLength)。您无法将2.6*设置为Grid.Width,因为它不是有效的双值。
  2. DataTemplate有自己的NameScope,因此您无法使用ElementName引用DataTemplate外部的元素。此外,DataGridTemplateColumn不是UIElement,也不在VisualTree中,因此DataGridTemplateColumn不是DataTemplate中定义的元素的父级。 DataGridTemplateColumn仅用于定义列。然后,DataGrid根据定义生成标题,行和单元格,但DataGridColumns永远不会被渲染。