当前位置: 首页 > 知识库问答 >
问题:

WPF DataGrid-将列与自动生成的列对齐

翟嘉祥
2023-03-14

我有一个WPF Datagrid绑定到一个DataSet;列是自动生成的。我需要将数字列向右对齐。我可以使用一个转换器,就像我在网上找到的这个例子:

    <DataGrid x:Name="dg" ItemsSource="{Binding Source}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Col}" Header="Col" Width="200">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="TextBlock">
                        <Setter Property="TextBlock.HorizontalAlignment" Value="{Binding Col, Converter={StaticResource converter}}" />
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

但是在我的例子中,列是自动生成的,所以我不能使用

<DataGrid.Columns>

我不知道该怎么处理财产

<Setter Property="TextBlock.HorizontalAlignment" Value="{Binding Col, Converter={StaticResource converter}}" />

任何解决方案?

共有1个答案

洪德寿
2023-03-14

这可能不是一个理想的解决方案,但您可以尝试在生成每个列后,通过将处理程序挂接到AutoGeneratedColumns事件,为它们设置ElementStyle。

这就是我所尝试的:

风格

<Style TargetType="TextBlock" x:Key="ColumnStyle">
    <Setter Property="HorizontalAlignment" Value="{Binding Path=Text, RelativeSource={RelativeSource Self}, Converter={StaticResource AlignmentConverter}}" />
</Style>

数据网格的XAML

<DataGrid x:Name="dg" 
          ItemsSource="{Binding Items}" 
          AutoGenerateColumns="True" 
          AutoGeneratedColumns="Dg_OnAutoGeneratedColumns" 
          SelectionMode="Extended"/>

EventHandler代码(代码隐藏)

void Dg_OnAutoGeneratedColumns(object sender, EventArgs e)
{
    foreach (var dataGridColumn in dg.Columns)
    {
        var textColumn = dataGridColumn as DataGridTextColumn;
        if (textColumn == null) continue;

        textColumn.ElementStyle = FindResource("ColumnStyle") as Style;
    }
}

如果您不喜欢代码隐藏,则始终可以创建附加行为以实现相同的结果。

 类似资料:
  • 我有两个表A(id,col1,col2)和B(col3,col4,col5,col6) 这引发错误 为什么postgres不自动为列“id”生成值?如果我从表B中提供“id”,或者如果我插入单行(没有select)并为自动生成的列提供“default”关键字,查询就可以工作。 编辑:表创建查询

  • 我正在尝试使用@ManyToOne和@OneToMany映射实体表。映射列位于名为“internal_plan_id”的子表中。根据要求,我不能更改名称。下面是两个实体表:父表 儿童桌: 我得到错误为:错误:关系“financial_plan_subplan”的列“internal_plan_id_internal_plan_id”不存在。 financial_subplan中用于映射的现有列名是

  • 本文向大家介绍python列表生成式与列表生成器的使用,包括了python列表生成式与列表生成器的使用的使用技巧和注意事项,需要的朋友参考一下 列表生成式:会将所有的结果全部计算出来,把结果存放到内存中,如果列表中数据比较多,就会占用过多的内存空间,可能会导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况 列表生成器:会创建一个列表生成器对象,不会一次性的把所有结果都计算出来,如

  • 给定一个包含以下格式数据的大文件(V1,V2,…,VN) 我正在尝试使用Spark获得一个类似于下面的配对列表 我尝试了针对一个较旧的问题所提到的建议,但我遇到了一些问题。例如, 我得到了错误, 有人能告诉我哪些地方我可能做得不对,或者有什么更好的方法可以达到同样的效果?非常感谢。

  • 我目前的Android应用程序采用Room/SQLite数据库 我的一个房间实体需要一个序列列,每次插入新行时该列都会递增。 我希望自动生成此序列,但是自动生成似乎仅适用于PrimaryKey 当Int列不是主键时,有没有办法在房间中自动递增?

  • 当我们将一个对象作为键插入到一个映射中时,它的哈希代码就会生成。但如果我的密钥是对象列表,那么,它是列表中所有对象哈希代码的总和吗? 请帮助理解。