DataGrid行内容垂直alignment

我有一个从WPF 4.0 RTM的常规DataGrid,我从数据库中放置数据。 为了使DataGrid的干净和清淡的风格我使用高/高的行,默认情况下,DataGrid排列行垂直位置的内容,但我想设置一个中心垂直alignment。

我已经尝试使用这个属性

VerticalAlignment="Center" 

在DataGrid选项中,但它不能帮助我。

这里是一个XAML代码的例子,描述我的DataGrid没有中心垂直alignment:

 <DataGrid x:Name="ContentDataGrid" Style="{StaticResource ContentDataGrid}" ItemsSource="{Binding}" RowEditEnding="ContentDataGrid_RowEditEnding"> <DataGrid.Columns> <DataGridTextColumn Header="UserID" Width="100" IsReadOnly="True" Binding="{Binding Path=userID}" /> <DataGridTextColumn Header="UserName" Width="100" Binding="{Binding Path=userName}" /> <DataGridTextColumn Header="UserAccessLevel" Width="100" Binding="{Binding Path=userAccessLevel}" /> <DataGridTextColumn Header="UserPassword" Width="*" Binding="{Binding Path=userPassword}" /> </DataGrid.Columns> </DataGrid> 

执行此代码的结果:

替代文字

正如你所看到的,所有行的内容都有顶部垂直alignment。

为了获得每行内容的中心垂直alignment,我必须添加什么?

谢谢。

这个问题的完整解决scheme:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8c2aa3b1-d967-41ab-93c2-6c8cb1b7d29d/#488d0cdd-d0c2-469a-bfb6-8ca3d75426d4

简而言之,在样式文件集中:

 <!--body content datagrid cell vertical centering--> <Style x:Key="Body_Content_DataGrid_Centering" TargetType="{x:Type DataGridCell}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridCell}"> <Grid Background="{TemplateBinding Background}"> <ContentPresenter VerticalAlignment="Center" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> 

在窗口文件中:

 <DataGrid x:Name="ContentDataGrid" Style="{StaticResource ContentDataGrid}" CellStyle="{StaticResource Body_Content_DataGrid_Centering}" ItemsSource="{Binding}" RowEditEnding="ContentDataGrid_RowEditEnding"> <DataGrid.Columns> <DataGridTextColumn Header="UserID" Width="100" IsReadOnly="True" Binding="{Binding Path=userID}" /> <DataGridTextColumn Header="UserName" Width="100" Binding="{Binding Path=userName}" /> <DataGridTextColumn Header="UserAccessLevel" Width="100" Binding="{Binding Path=userAccessLevel}" /> <DataGridTextColumn Header="UserPassword" Width="*" Binding="{Binding Path=userPassword}" /> </DataGrid.Columns> </DataGrid> 

这会给你一个想要的结果:

替代文字

要设置单独的文本alignment,您可以使用:

 <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="TextAlignment" Value="Center" /> </Style> </DataGridTextColumn.ElementStyle> 

以下代码将垂直alignmentDataGridTextColumn单元格的内容:

 <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="VerticalAlignment" Value="Center"></Setter> </Style> </DataGridTextColumn.ElementStyle> 

编辑:我已经回到这个问题,发现下面的解决scheme更好地工作,它将在DataGridTextRows中的所有单元格的内容中心水平和垂直。

 <UserControl.Resources> <ResourceDictionary> <Style TargetType="DataGridCell"> <Setter Property="HorizontalAlignment" Value="Stretch"></Setter> <Setter Property="VerticalAlignment" Value="Stretch"></Setter> <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> <Setter Property="TextBlock.TextAlignment" Value="Center"></Setter> <Setter Property="TextBlock.VerticalAlignment" Value="Center"></Setter> </Style> </ResourceDictionary> </UserControl.Resources> 

您也可以不覆盖ControlTemplate:

  <Style TargetType="{x:Type DataGridCell}"> <Setter Property="VerticalAlignment" Value="Center" /> </Style> 

属性值VerticalAlignment="Center"将使DataGrid在其父元素中间。

您可能需要VerticalContentAlignment 。

这个为我工作

  <DataGrid.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="TextBlock.TextAlignment" Value="Center"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridCell}"> <Grid Background="{TemplateBinding Background}"> <ContentPresenter VerticalAlignment="Center"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </DataGrid.CellStyle> 

在Jamier的答案的基础上,下面的代码在使用自动生成的列时对我有用:

 Style VerticalCenterStyle = new Style(); public MainWindow() { // This call is required by the designer. InitializeComponent(); VerticalCenterStyle.Setters.Add(new Setter(VerticalAlignmentProperty, VerticalAlignment.Center)); } private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if (e.Column is DataGridTextColumn) { ((DataGridTextColumn)e.Column).ElementStyle = VerticalCenterStyle; } }