我有一个绑定(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/