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

qin*_* xu 3 wpf datagrid coding-style vertical-alignment

我想VerticalAlignment=Center在DataGrid中创建数据记录 .默认情况下,数据记录 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>
Run Code Online (Sandbox Code Playgroud)

Pav*_*lov 8

尝试设置VerticalContentAlignment="Center"DataGrid:

<DataGrid VerticalContentAlignment="Center">
  ...
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

或者你可以为你的风格添加一个setter:

<Setter Property="VerticalContentAlignment" Value="Center"/>
Run Code Online (Sandbox Code Playgroud)

应用于ItemsControls时,此属性通常会修改每个单独项目容器的对齐方式.在您的情况下,这应该使所有行将其内容对齐到中心.

UPDATE

似乎内置的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>
Run Code Online (Sandbox Code Playgroud)

对于DataGridTextColumn,设置ElementStyle:

<Style>
  <Setter Property="FrameworkElement.VerticalAlignment" Value="Center"/>
</Style>
Run Code Online (Sandbox Code Playgroud)

我已经试过这上DataGridTextColumn,但该属性是从其父DataGridBoundColumn,因此应该适用于DataGridCheckBoxColumnDataGridHyperlinkColumn也.

更新2

顺便说一下,还有另一种解决方案.