我正在使用WPF DataGrid。我试图让我的DataGridTextColumns的内容垂直居中显示的文本。
目前,我的单元格值如下所示:http://imgur.com/nkbE7Wt。如您所见,它们垂直对齐到单元格的顶部。
我尝试将模板添加到我的DataGridCells的样式中,这是有效的,它将文本集中在一起:http://imgur.com/TCo6RCa。 DataGridCells的样式如下:
<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource SelectedBrush}" />
<Setter Property="TextElement.Foreground" Value="#111111" />
</Trigger>
</Style.Triggers>
<Setter Property="Background" Value="Transparent" />
<Setter Property="TextElement.Foreground" Value="#666666" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Background="Transparent"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="0"
SnapsToDevicePixels="True"
Padding="5"
VerticalAlignment="Center">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这个添加的模板基本上完全符合我应该如何显示。但是有一个问题。当用户单击任何单元格以突出显示该行时,他们必须在样式中设置的边框内单击以实际获取DataGrid以突出显示该行。
使用Snoop我能够看到它是导致问题的边界。这个:http://imgur.com/9pD0W5C是Snoop显示为边框的内容,除非我的鼠标在点击时亮起或在红色高亮显示的行中,否则不会选择/突出显示该行。
有什么方法可以修改我的模板,以便在点击单元格的任何部分而不仅仅是在边框内时突出显示该行?
或者,是否有一些简单的方法可以将文本垂直居中放置在我的单元格中?
我已经尝试在我的样式中设置TextElement.VerticalAlignment
,但这会导致数据网格中有一些额外的行看起来很奇怪。
答案 0 :(得分:2)
模板中的边框未填充可用的DataGridCell空间,因为它居中(VerticalAlignment="Center"
)
如果您仅为ContentPresenter设置VerticalAlignment="Center"
,为边框设置VerticalAlignment="Stretch"
和HorizontalAlignment="Stretch"
,则应该可以。
最好配置样式(带样式)的对齐
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border ...>
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" ... />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>