2012-04-05 4 views
1

셀에 들어있는 값을 기준으로 셀의 텍스트 색을 변경하고 싶습니다. 값 변환기를 사용하지만 변환 함수에 전달되는 개체의 형식이 DataRowView이며 나는 그 값을 기초로 한 번에 하나의 세포를 강조하기를 원하기 때문에 세포를 통과시키고 자한다. 희망은 그 말이 맞습니다.wpf DataGrid의 셀 값을 기준으로

감사합니다.

코드 만약 내가 데이터 그리드에 적용 할 스타일 :

<UserControl.Resources> 
    <local:MyBkColorConverter x:Key="bkColorCvrt"/> 
    <Style x:Key="GridStyle" TargetType="DataGrid"> 
     <Setter Property="ItemsSource" Value="{Binding}" /> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="RowBackground" Value="Transparent" /> 
     <Setter Property="HeadersVisibility" Value="None" /> 
     <Setter Property="GridLinesVisibility" Value="None" /> 
     <Setter Property="SelectionUnit" Value="Cell" /> 
     <Setter Property="SelectionMode" Value="Single" /> 
     <Setter Property="IsReadOnly" Value="True" /> 
     <Setter Property="HorizontalScrollBarVisibility" Value="Disabled" /> 
     <Setter Property="CellStyle"> 
      <Setter.Value> 
       <Style TargetType="{x:Type DataGridCell}"> 
        <Setter Property="Foreground"> 
         <Setter.Value> 
          <Binding Converter="{StaticResource bkColorCvrt}"/> 
         </Setter.Value> 
        </Setter> 
        <Style.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="Background" Value="Black"> 
          </Setter> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </Setter.Value> 
     </Setter> 
     </Style> 
</UserControl.Resources> 

그리고 C#을 부분 :

공용 클래스 MyBkColorConverter : { # 지역 IValueConverter 회원

public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //The type of value here is actually DataRowView 
     //here i would like to have a cell passed. is that possible to archive? 
     return Brushes.LightGray; 
    } 

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
IValueConverter

답변

2

각 컨트롤에 적용 할 스타일을 만들면 해당 유형과 일치합니다.

DataGridTemplateColumn을 사용하여 원하는대로 할 수있는 사용자 지정 템플릿을 만들면됩니다. 당신이 Binding에 변환 할 필요가있는 속성에 Path를 전달하면

<DataGridTemplateColumn Header="Name">      
     <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Foreground="{Binding Name,Converter={StaticResource colconverter}}" Text="{Binding Name}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
+0

내 표가 DataTable에 바인딩되어 있으므로 직접 열을 정의하지 않습니다. 이 코드는 어디에 붙여야합니까? – Anya

+0

원본 행에 어떤 열이 있는지 알면 위와 같이 바인딩 할 수 있습니다. 예를 들어 직원에게 데이터 테이블이 있고 이름이 열이면 위의 사항이 정상적으로 작동합니다. – JSJ

1

그것은 작동합니다.

<DataGridTextColumn Binding="{Binding Path=AgentUtilization, StringFormat=P}" Header="Agent Utilization"> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="Foreground" Value="{Binding Path=AgentUtilization, Converter={StaticResource UtilizationFormat}}" /> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
</DataGridTextColumn> 

변환기로 전달되는 형식은 바인딩 경로 (물론 캐스트 이후)의 속성 유형입니다.

+0

감사합니다. – Anya

+0

내 표가 DataTable에 바인딩되어 있으므로 직접 열을 정의하지 않습니다. 이 코드는 어디에 붙여야합니까? – Anya

관련 문제