The problem in your code is, that a TextBlock has no built-in support for vertical content alignment. To align the content inside your cells, you would have to overwrite the CellTemplate for the corresponding columns and set the vertical alignment on a wrapping grid or border. Add this code to a resource dictionary:
<Style x:Key="CenteredCellStyle"
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>
Use as
My_Data_Grid.ItemsSource = an_observableCollection ;
Style my_Style = Application.Current.FindResource("CenteredCellStyle") as Style;
DataGridTextColumn a_Column = new DataGridTextColumn();
a_Column.Header = "_Header_";
a_Column.Binding = new Binding("index");
a_Column.Width = 80;
a_Column.CellStyle = my_Style;
My_Data_Grid.Columns.Add(a_Column);