如何在WPF DataGrid中垂直居中行内容?

3

我希望将DataGrid中数据记录的VerticalAlignment=Center。默认情况下,数据记录的VerticalAlignment=Top,看起来很丑。您能给我提供这种样式吗?

我在App.xaml文件中定义了我的样式。以下是我的当前DataGrid样式:

    <Style x:Key="DataGridView" TargetType="DataGrid">
        <Setter Property="AlternatingRowBackground" Value="AliceBlue"></Setter>
        <Setter Property="AlternationCount" Value="1"></Setter>
        <Setter Property="AutoGenerateColumns" Value="False"></Setter>
        <Setter Property="GridLinesVisibility" Value="Horizontal"></Setter>
        <Setter Property="VerticalGridLinesBrush" Value="DarkGray"></Setter>
        <Setter Property="HorizontalGridLinesBrush" Value="DarkGray"></Setter>
        <Setter Property="RowHeight" Value="32"></Setter>
    </Style>
1个回答

8
尝试在“DataGrid”上设置VerticalContentAlignment="Center":
<DataGrid VerticalContentAlignment="Center">
  ...
</DataGrid>

或者您可以为您的样式添加一个 setter 方法:
<Setter Property="VerticalContentAlignment" Value="Center"/>

当应用于ItemsControl时,此属性通常会修改每个单独的项容器的对齐方式。在您的情况下,这将使所有行将其内容对齐到中心。 更新 看起来WPF内置的DataGrid不遵循此规则。
解决方案取决于您使用的列类型。
对于DataGridTemplateColumn,请使用以下CellTemplate
<DataTemplate>
    <!--Substitute the TextBlock by the actual cell content, but don't drop VerticalAlignment-->
  <TextBlock VerticalAlignment="Center" Text="{Binding Text}"/>
</DataTemplate>

对于 DataGridTextColumn,请设置 ElementStyle

<Style>
  <Setter Property="FrameworkElement.VerticalAlignment" Value="Center"/>
</Style>

我试过在 DataGridTextColumn 上使用此属性,但该属性来自其父级 DataGridBoundColumn,因此也应适用于 DataGridCheckBoxColumnDataGridHyperlinkColumn更新2 顺便提一下,还有另一个解决方案

嗨,Pavel Gatilov,我尝试在我的样式设置列表中添加VerticalContentAlignment="Center",但似乎没有效果。 - qing xu
顺便说一下,DataGrid中的列是由我的C#代码创建的,而不是控件本身自动生成的。因为我的ItemsSource是DataView,我无法知道要显示哪些列(它们来自数据库且列是动态的)。 - qing xu
@qingxu 请查看我的更新帖子。我已经尝试了这两个选项,它们确实有效。唯一的问题是你可能无法将其包含在DataGridStyle中,但是在创建列时应该能够分配属性。 - Pavel Gatilov
谢谢你的解决方案,我按照你的建议创建了DataGridTemplateColumn而不是DataGridTextColumn,它有效果了。正如你所说,VerticalContentAlignment可以在DataGridTemplateColumn、DataGridCheckBoxColumn和其他列上工作,但不适用于DataGridTextColumn。 - qing xu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接