有一个WPF Datagrid,没有什么特别之处。它有时候HeadersVisibility All / Row,取决于我们代码中的用法。 但无论标题样式如何,它都有对齐问题。 标题/数据文本都没有正确对齐,也没有左上角的第一个标题,这里缺少1个像素。 我附上一张图片以便更加明显。
这真的看起来不专业和业余。 文本对齐比左上角差得多,所以如果我能解决这个问题,那将会是一个很大的改进。
垂直:如我所见,行标题文本与中心正确对齐,与上面的数据不同。
水平:这与哪一个(标题<>数据)对齐并不重要,但至少它们应该是内联的。
由于
修改 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放在单元格的中心。有了这个,文本或多或少在中心,但不好,因为文本块不再填充单元格。我希望文本块填充单元格,并使文本垂直居中。 使用“填充”应该可以解决我的问题,但它没有效果。
答案 0 :(得分:1)
您可以将文字置于DataGridColumn
中,如:
<DataGridTemplateColumn Header="1">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Item1Property}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 1 :(得分:0)
我找到了解决方案,使用Padding
我可以将单元格文本与标题文本对齐。
但是,正如我所提到的,使用简单的Padding
或TextBlock.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>