【问题标题】:How to get DataTemplate to fill DataGridTemplateColumn如何让 DataTemplate 填充 DataGridTemplateColumn
【发布时间】:2015-07-27 19:44:09
【问题描述】:

我有以下用于创建数据网格的 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 拉伸/填充其父单元格。我在下面添加了一张图片来演示我的问题。请注意 Initial Date 文本周围突出显示的区域,因为这是 DataTemplate 边框。有谁知道如何更改 DataTemplate 以填充其父单元格?

感谢卡勒姆

【问题讨论】:

    标签: wpf


    【解决方案1】:

    要设置标题单元格对齐,您必须使用 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) 绑定到值为 2.6* (DataGridLength) 的 DataGridTemplateColumn.Width 属性。您不能将 2.6* 设置为 Grid.Width,因为它不是有效的双精度值。
    2. DataTemplate 有自己的NameScope,因此您不能使用 ElementName 引用 DataTemplate 之外的元素。此外,DataGridTemplateColumn 不是 UIElement 并且不在 VisualTree 中,因此 DataGridTemplateColumn 不是在 DataTemplate 中定义的元素的父级。 DataGridTemplateColumn 仅用于定义列。 DataGrid 然后根据定义生成标题、行和单元格,但 DataGridColumns 永远不会被渲染。

    【讨论】:

    • 嗨 Liero,效果很好!当我将 Grid.Width 属性(双精度)绑定到 DataGridTemplateColumn.Width 时,我只是在尝试不同的想法来解决上面提出的问题。再次感谢卡勒姆的欢呼
    猜你喜欢
    • 2012-04-02
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2012-10-08
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多