如何更改自动生成的列文本对齐方式

Posted

技术标签:

【中文标题】如何更改自动生成的列文本对齐方式【英文标题】:How to change Autogeneratedcolumn text alignment 【发布时间】:2013-12-27 07:46:46 【问题描述】:

我想弄清楚如何在代码中更改自动生成的列的文本对齐方式。

    Private Sub dgBook_AutoGeneratingColumn(sender As System.Object, e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles dgBook.AutoGeneratingColumn
        If e.PropertyType = GetType(DateTime) Then
            Dim dataGridTextColumn As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
            If dataGridTextColumn IsNot Nothing Then
                dataGridTextColumn.Binding.StringFormat = "0:d"
            End If
        End If

        If e.PropertyName = "Amount" Then
            Dim dataGridTextColumn As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
            If dataGridTextColumn IsNot Nothing Then
                dataGridTextColumn.Binding.StringFormat = "0:#,##0.00;(#,##0.00)"
                'I tried the next line for testing but it did not work
                dataGridTextColumn.SetValue(TextBox.TextAlignmentProperty, TextAlignment.Center)
            End If
        End If
     End Sub

【问题讨论】:

尝试改变单元格的样式 @atomaras 我不确定我会如何改变对齐方式。有代码示例吗? 【参考方案1】:

请看这里DataGridTextColumn Text Alignment

【讨论】:

我试图弄清楚如何通过代码设置值,因为列是自动生成的。 我试过了:dataGridTextColumn.SetValue(TextBox.TextAlignmentProperty, TextAlignment.Center) 但没用。【参考方案2】:

所以我最终做的是在 XAML WPF 代码中设置样式

<Window.Resources>
    <Style TargetType="DataGridCell" x:Key="rightAlignCell">
        <Setter Property="HorizontalAlignment" Value="Right"></Setter>
    </Style>
</Window.Resources>

然后我在后面的代码中将单元格样式设置为该样式。

Private Sub datagrid1_AutoGeneratingColumn(sender As System.Object, e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles datagrid1.AutoGeneratingColumn
    If e.PropertyName = "Amount" Then
        Dim dataGridTextColumn As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
        If dataGridTextColumn IsNot Nothing Then
            dataGridTextColumn.Binding.StringFormat = "0:#,##0.00;(#,##0.00)"
        End If
        e.Column.CellStyle = TryCast(FindResource("rightAlignCell"), Style)
    End If
end sub

【讨论】:

这很好,但我必须将 FindResource("rightAlignCell") 替换为 DirectCast(sender, DataGrid).FindResource("rightAlignCell") 才能使其正常工作。【参考方案3】:

这几天我一直在尝试自己做这件事,但我需要/想要一个纯代码背后的解决方案。经过大量的尝试和错误,我终于在不同的地方找到了几个不同的部分,我可以将它们放在一起以按照我想要的方式排列对齐。

我知道这是 C# 并且最初的问题是针对 VB 的,但也许它会解析得足够好。

这对我有用,所以下一个来的人不必那么努力工作:

首先我设置了一种样式来右对齐 WPF DataGrid 上列的内容

Style rightStyle = new Style  TargetType = typeof(DataGridCell) ;
style.Setters.Add(new Setter(Control.HorizontalAlignmentProperty, HorizontalAlignment.Right));

然后我将 CellStyle 设置为我想要右对齐的列上定义的样式,

dataGridTextColumn.CellStyle = style;

就像其他所有事情一样,这很简单......一旦你知道你所追求的东西很简单。

当然,这可以调整为居中或左对齐等。

我并不是要为此归功于自己,我只是采用了其他人发布的代码并重新组装了各个部分。我终于有一些小小的贡献可以提供给该网站,这对我自己弄清楚这个 .NET 东西的努力有很大帮助,所以我想提供它。

【讨论】:

以上是关于如何更改自动生成的列文本对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 和 XAML 中,如何让行详细信息的列在跳过多个列后动态更改以在父行下对齐?

小功能⭐️Unity自动更改文本框高度,以显示全部文本

如何更改 SQL 脚本以使具有金额的列右对齐

为啥自定义字体会移动文本(更改垂直对齐方式)? [复制]

怎么样为Excel2010表格设置自动换行

如何更改生成表中的列顺序(grails 约束不适用于 mongodb 插件)