0

我有一个数据网格,我在后面的代码中定义了样式和列,如下所示:

My_Data_Grid.ItemsSource = an_observableCollection ;
Style my_Style = new System.Windows.Style(typeof(DataGridCell));
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);

此代码段将产生类似以下屏幕截图的结果:

在此处输入图像描述

我想更改对齐方式,以便对以前的代码应用以下更改:

my_Style.Setters.Add(
            new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center));
my_Style.Setters.Add(
            new Setter(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center));

效果将如下截图:

在此处输入图像描述

如您所见,现在对齐很好。但选择不再是整个细胞!只有文本突出显示为选中!

有没有人知道如何解决这个问题?

4

1 回答 1

1

您的代码中的问题是, TextBlock 没有对垂直内容对齐的内置支持。要对齐单元格内的内容,您必须覆盖相应列的 CellTemplate 并在环绕网格或边框上设置垂直对齐方式。将此代码添加到资源字典:

<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>

用于

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);

请参阅:DataGrid 行内容垂直对齐

于 2013-06-12T08:42:50.247 回答