2016-06-27 2 views
1

저는 WPF에 처음 접했고 DataGrid 열에 항상 두 개의 열이있는 두 개의 다른 컨트롤 템플릿을 사용하는 방법을 모릅니다. 이것은 데이터 그리드의 XAML입니다 :DataGrid 열에 다른 스타일을 적용하는 방법

<DataGrid x:Name="HomeSoftwareGrid" 
      CanUserAddRows="false" 
      ItemsSource="{Binding CollectedSoftwares}" 
      AutoGenerateColumns="True" 
      FontSize="15" 
      ColumnWidth="*" 
      IsReadOnly="True" 
      AutoGeneratingColumn="OnAutoGeneratingColumn" 
      CellEditEnding="OnCellEditEnding" 
      HorizontalAlignment="Center" 
      MaxWidth="600"> 
</DataGrid> 

내가 열 '헤더를 특정 열을 제거하고 편집 할 속성 AutoGeneratingColumn을 사용하고

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    PropertyDescriptor propertyDescriptor = (PropertyDescriptor)e.PropertyDescriptor; 
    e.Column.Header = propertyDescriptor.DisplayName; 
    if (propertyDescriptor.DisplayName == "Resources") 
    { 
     e.Cancel = true; 
    } 
    else if (propertyDescriptor.DisplayName == "SoftwareStatus") 
    { 
     e.Column.Header = "Software Status"; 

    } 
    else if (propertyDescriptor.DisplayName == "SoftwareName") 
    { 
     e.Column.Header = "Software Name"; 
    } 
} 

이 내가 사용하고자하는 콘텐츠 템플릿은 첫 번째 열의 첫 번째 열과 두 번째 열의 두 번째 열은 분명히 다음과 같습니다. D :

<!-- first column style --> 
<Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <ContentPresenter Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<!-- second column style --> 
<Style x:Key="SoftwareStatusDataGridColumn" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Grid HorizontalAlignment="Center"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto" /> 
         <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 

        <Rectangle x:Name="ImgPartially" Grid.Column="0" Width="20" Height="20" Fill="Yellow"> 
         <Rectangle.OpacityMask> 
          <VisualBrush Stretch="Uniform" Visual="{StaticResource appbar_warning}" /> 
         </Rectangle.OpacityMask> 
        </Rectangle> 

        <ContentPresenter Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

어떻게하면됩니까?

답변

1

sender 이벤트는 DataGrid이며 DataGrid는 시각적 트리에서 셀 스타일을 찾을 수 있습니다. 그럼 당신은 개별적으로 컬럼에 해당 스타일을 지정할 수 있습니다

else if (propertyDescriptor.DisplayName == "SoftwareName") 
{ 
    e.Column.Header = "Software Name"; 
    e.Column.CellStyle = (sender as FrameworkElement).FindResource("SoftwareStatusDataGridColumn") as Style; 
} 
<Style TargetType="{x:Type DataGridCell}"> 

이 스타일은, 그것은 기본적으로 DataGridCells에 할당됩니다 키로 유형을 사용, 필요

뒤에 코드에서 명시 적으로 설정 없습니다
+0

감사합니다. 이것은 두 번째 열의 매력처럼 작동하지만 첫 번째 열은 스타일을 "잃어 버리는"것처럼 보입니다. 텍스트는 가운데 정렬되어야하지만 두 번째 열의 스타일을 적용하면 왼쪽 정렬됩니다. S – Sempri92

+0

@ Sempri92,'