c# - DataGrid 行内容垂直对齐

标签 c# wpf xaml datagrid vertical-alignment

我有一个来自 WPF 4.0 RTM 的常规 DataGrid,我将数据库中的数据放入其中。为了使 DataGrid 的样式简洁明了,我使用高/高行,默认情况下 DataGrid 将行内容对齐在顶部垂直位置,但我想设置一个中心垂直对齐。

我已经尝试过使用这个属性

VerticalAlignment="Center"

DataGrid 选项中,但它对我没有帮助。

这里是一个 XAML 代码示例,描述了我的没有中心垂直对齐的 DataGrid:

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

执行这段代码的结果:

alt text

如您所见,所有行内容都顶部垂直对齐。

我必须添加什么才能使每行内容居中垂直对齐?

最佳答案

MSDN 上此问题的完整解决方案:Vertical alignment of DataGrid row content .

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

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

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

alt text

关于c# - DataGrid 行内容垂直对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3981250/

相关文章:

c# - 从 IQueryable 中查找元素的索引

c# - Session 和 Cookie 有什么区别?

c# - 未设置 UWP ComboBox SelectedValue

c# - WinRT 中带包装的 GridView 方向

c# - 是否可以创建一个可以从两个线程访问的 GUI 控件?

c# - Entity Framework : dynamically change model based on plugins found with MEF

.net - WPF 列表框在鼠标悬停时选择项目

c# - 从 XAML 内部创建 C# 类的实例

WPF - TextBlock 文本 + 超链接

xaml - Xamarin.Forms 与数据触发器绑定(bind) - 值不更新