WPF datagridtextcolumn垂直内容对齐无效

时间:2017-09-08 03:17:38

标签: c# wpf xaml

我是c#的新手并在WPF UI上寻求帮助。

1)我希望我的数据网格内容全部显示在列的中心。

2)为了在UI中看起来不错,我需要datagridtextboxcolumn和 datagridtemplatecolumn(组合框)宽度和高度适合列。

目前,我已经使用Stretch VerticalAlignment和Horizo​​ntalAlignment实现了Content Presenter的样式,成功地使数据适合列的宽度和高度。

在设置TextBlock.TextAlignment的setter属性后,成功显示数据水平居中。

但即使我已将垂直内容对齐的setter属性设置为Center,数据也不会垂直显示在中心。

所以,我需要专家给我一些建议,使数据在垂直和水平方向上显示,并拉伸宽度高度以适合列。

以下是我的样式代码

    <Style x:Key="Body_Content_DataGrid_Centering"
    TargetType="{x:Type DataGridCell}">
        <Setter Property="TextBlock.TextAlignment" Value="Center" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Grid Background="{TemplateBinding Background}">
                        <ContentPresenter VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

以下将是我的DataGrid实现代码:

    <DataGrid x:Name="dataGridAccount" RowHeight="27" MinRowHeight="50" ColumnHeaderHeight="50" MinColumnWidth="150" RowHeaderWidth="0" Margin="0" Grid.Row="1" AutoGenerateColumns="False" CellStyle="{StaticResource Body_Content_DataGrid_Centering}" VerticalContentAlignment="Bottom">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding username}" ClipboardContentBinding="{x:Null}" Header="Username" Width="1*">
                <DataGridTextColumn.HeaderStyle>
                    <Style TargetType="{x:Type DataGridColumnHeader}">
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    </Style>
                </DataGridTextColumn.HeaderStyle>
            </DataGridTextColumn>
            <DataGridTemplateColumn Header="Entry Level" Width="1*">
                <DataGridTemplateColumn.HeaderStyle>
                    <Style TargetType="{x:Type DataGridColumnHeader}">
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    </Style>
                </DataGridTemplateColumn.HeaderStyle>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding entryLevel}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                     <DataTemplate>
                        <ComboBox ItemsSource="{StaticResource entryLevel}"
                                                  SelectedItem="{Binding entryLevel}" Margin="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
                     </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

目前的结果: http://imgur.com/a/BfJrC

预期成果: http://imgur.com/a/v8v8a

英语不是我的母语,请原谅我的任何错误。

先谢谢了。

2 个答案:

答案 0 :(得分:0)

我认为,Textblock内的GridCells并没有占据整个单元格的空间。您为GridCell设置VerticalAlignment="Stretch" HorizontalAlignment="Stretch",但不为此Cell中的TextBlock设置。因此,您应该将两个对齐添加到单元格内的TextBlock样式。

答案 1 :(得分:0)

尝试在ContentPresenter上设置VerticalAlignment={TemplateBinding VerticalContentAlignment}