2014-04-22 29 views
1

我有一个绑定到DataSet的WPF Datagrid;列是自动生成的。 我需要对齐右侧的数列。我可以使用一个转换器,就像这个例子中,我发现在网络上: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> 

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

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

任何解决方案?

回答

4

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

这是我的尝试:

风格

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

XAML的DataGrid的

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

如果您不喜欢Code Behind,那么您总是可以创建附加行为来获得相同的结果。

+0

完美!谢谢 – rPulvi