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

标签 c# wpf datagrid

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

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

而且我不知道如何绑定(bind)属性

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

有什么解决办法吗?

最佳答案

这可能不是一个理想的解决方案,但您可以尝试通过将处理程序 Hook 到 AutoGenerateColumns 事件来生成每列后设置 ElementStyle。

这是我尝试过的:

风格

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

DataGrid 的 XAML

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

事件处理程序代码(代码隐藏)

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

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

关于c# - WPF DataGrid - 将列与自动生成的列对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23217575/

相关文章:

c# - .NET 有哪些 Web API 框架?像 Frapi 或葡萄

C#使用like运算符的数据表过滤器

wpf 触发器 Datagrid RowCount

apache-flex - 从 Flex DataGrid 控件中复制 + 粘贴

c# - 从 WebBrowser 中的 HTML 元素获取属性值

c# - Outlook 电子邮件是否有非二进制格式?

c# - 如何在 ASP 中测试 AccountController?

c# - 如何使用相对路径将本地 *.html 文件加载到 WPF Web 浏览器

wpf - DataGrid 不会更新 ViewModel

wpf - 属性名称不适用于我的数据网格列绑定(bind)