Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF DataGrid-将列与自动生成的列对齐_C#_Wpf_Datagrid - Fatal编程技术网

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

C# WPF DataGrid-将列与自动生成的列对齐,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个绑定到数据集的WPF数据网格;列是自动生成的。 我需要将数字列向右对齐。我可以使用转换器,就像我在网上找到的这个例子: <DataGrid x:Name="dg" ItemsSource="{Binding Source}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Col}" He

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

    <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}}" />


任何解决方案?

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

这就是我所尝试的:

风格

<Style TargetType="TextBlock" x:Key="ColumnStyle">
    <Setter Property="HorizontalAlignment" Value="{Binding Path=Text, RelativeSource={RelativeSource Self}, Converter={StaticResource AlignmentConverter}}" />
</Style>
如果您不喜欢代码隐藏,则始终可以创建附加行为以实现相同的结果

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