2014-04-22 2 views
1

DataSet에 바인딩 된 WPF Datagrid가 있습니다. 열은 자동 생성됩니다. 숫자 열을 오른쪽으로 정렬해야합니다. 이 예에서 I는 웹에서 발견처럼은 변환기를 사용할 수 있습니다 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을 시도하고 설정할 수 있습니다.

내가 뭘하려 : 데이터 그리드

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

이벤트 핸들러 코드에 대한

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

XAML

스타일 (코드 뒤에)

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

코드 비하인드가 마음에 들지 않으면 동일한 결과를 얻기 위해 항상 첨부 된 비헤이비어를 만들 수 있습니다.

+0

완벽! 고맙습니다 – rPulvi