2012-04-05 14 views
1

セルに含まれる値に基づいてセルのテキストの色を変更したい 私は値コンバータを使用しますが、何らかの形でConvert関数に渡されるオブジェクトの型はDataRowViewです。私はその値に基づいて一度に1つのセルを強調表示したいので、Cellを渡したいと思います。希望は意味をなさない。wpfデータグリッド内のセル値に基づいて

ありがとうございます!

コードであれば、私は、データグリッドに適用されるスタイル:

<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: { #region 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を使用して、必要に応じてカスタムテンプレートを作成するだけです。

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

グリッドがDataTableにバインドされているため、自分で列を定義しません。このコードはどこに貼り付けますか? – Anya

+0

あなたのソース行にどの列が来るのか分かっていれば、上記と同じようにバインドできます。たとえば、従業員のデータテーブルがあり、Nameが列の場合は、上記のとおりです。 – JSJ

1

あなたはBindingに変換する必要があるプロパティにPathを渡す場合、それは動作します。

変換プログラムに渡されるタイプは、バインディングパスのプロパティのタイプ(もちろん、キャスト後)です。

+0

ありがとうございます。 – Anya

+0

グリッドがDataTableにバインドされているため、自分で列を定義しません。このコードはどこに貼り付けますか? – Anya

関連する問題