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

nsc4cvqm  于 2023-02-13  发布在  其他
关注(0)|答案(4)|浏览(230)

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

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
nqwrtyyt

nqwrtyyt1#

因此,我最终要做的是在XAMLWPF代码中设置一个样式

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

8xiog9wr3#

几天来我一直在尝试这样做,但我需要一个纯粹是代码背后的解决方案。通过大量的尝试和错误,我终于在不同的地方找到了几个不同的部分,我可以把它们放在一起,以安排我想要的方式对齐。
我知道这是C#,最初的问题是VB的目标,但也许它会解析得足够好。
下面是对我有效的方法,这样下一个沿着的人就不必那么努力了:
首先,我设置了一个样式,使WPF数据网格上的列内容右对齐

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

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

dataGridTextColumn.CellStyle = style;

就像其他事情一样,它很简单......一旦你知道你在追求什么简单的东西。
当然,这可以调整为居中或向左对齐等。
我并不想为此居功,我只是把别人发布的代码重新组合起来,我只是终于有了一些小的贡献,提供给网站,这对我自己努力弄清楚这个.NET的东西有巨大的帮助,所以我想提供它。

ht4b089n

ht4b089n4#

我还没有找到静态oneliner,因为它包含了一个空白,但这就是我所做的:

public partial class MainWindow : Window
{
    private static readonly Style someColumnStyle = new(typeof(DataGridCell));
    private static readonly Setter rightAlignSetter = new(HorizontalAlignmentProperty, HorizontalAlignment.Right);

    public MainWindow()
    {
        InitializeComponent();
        someColumnStyle.Setters.Add(rightAlignSetter);
        /* add more styles as needed here, i.e. FontFamily etc */
    }

    private void GridSourceSettings_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        string header = e.Column.Header.ToString();
        if (header == "SomePropertyName")
            e.Column.CellStyle = someColumnStyle;
    }
}

相关问题