WPF数据网格标题/数据对齐问题

时间:2015-07-02 15:24:04

标签: wpf datagrid header alignment

有一个WPF Datagrid,没有什么特别之处。它有时候HeadersVisibility All / Row,取决于我们代码中的用法。 但无论标题样式如何,它都有对齐问题。 标题/数据文本都没有正确对齐,也没有左上角的第一个标题,这里缺少1个像素。 我附上一张图片以便更加明显。

enter image description here

这真的看起来不专业和业余。 文本对齐比左上角差得多,所以如果我能解决这个问题,那将会是一个很大的改进。

垂直:如我所见,行标题文本与中心正确对齐,与上面的数据不同。

水平:这与哪一个(标题<>数据)对齐并不重要,但至少它们应该是内联的。

由于

修改 XAML部分:

<dg2d:DataGrid2DT.CellStyle>
    <Style TargetType="wpftoolkit:DataGridCell">
            <Setter Property="TextBlock.VerticalAlignment" Value="Stretch"/>
            <Setter Property="TextBlock.HorizontalAlignment" Value="Stretch"/>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="LightBlue"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</dg2d:DataGrid2DT.CellStyle>

我尝试添加<Setter Property="TextBlock.Padding" Value="5, 5, 0, 0" />,但这没有效果。只是为了尝试我添加了<Setter Property="TextBlock.TextAlignment" Value="Right" /> - 这很好用。只有paddig什么都不做。也许细胞太小而无法填充?

EDIT2

如果我将VerticalAlignment设置为“Center”,则将Textblock放在单元格的中心。有了这个,文本或多或少在中心,但不好,因为文本块不再填充单元格。我希望文本块填充单元格,并使文本垂直居中。 使用“填充”应该可以解决我的问题,但它没有效果。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以将文字置于DataGridColumn中,如:

<DataGridTemplateColumn Header="1">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Item1Property}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

答案 1 :(得分:0)

我找到了解决方案,使用Padding我可以将单元格文本与标题文本对齐。 但是,正如我所提到的,使用简单的PaddingTextBlock.Padding不起作用,你需要一个&#34;技巧&#34;,我在这里找到它: Set a padding on dataGridCells in WPF

<dg2d:DataGrid2DT.CellStyle>
    <Style TargetType="wpftoolkit:DataGridCell">
        <Setter Property="TextBlock.VerticalAlignment" Value="Stretch"/>
        <Setter Property="TextBlock.HorizontalAlignment" Value="Stretch"/>

--> solution
        <Setter Property="Padding" Value="2,2,0,0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
                    <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
<-- solution

        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="LightBlue"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</dg2d:DataGrid2DT.CellStyle>
相关问题