2016-09-17 12 views
0

(あり、このトピックの周りに同様の質問がありますが、どれも本当に私はそれについて行ってきた方法と一致しません。)設定DataGridのセルの背景

私は、色を変更したいです私のDataGridの各セルの値(0から3までの整数)に基づいています。 現在、私はこれを使用して、マウスオーバーによってセルの色を変更することができる午前:

 <DataGrid Name="mapDisplay" ItemsSource="{Binding}" Margin="0,59,10,0"> 
      <DataGrid.CellStyle> 
       <Style TargetType="DataGridCell"> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="Red" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </DataGrid.CellStyle> 
     </DataGrid> 

このコードは、任意のは「赤」に、セルにマウスを合わせた変更します。しかし、私はその値に応じてどのように色を変えることができますか?

答えて

2

Change DataGrid cell colour based on valuesこの回答を参照してください。

私は次のコードでその答えに記載されているのと同じ方法で試しました。

<Window.Resources>   
     <local:ColorConverter x:Key="NameToBrushConverter"/> 
</Window.Resources> 

    <Grid> 
     <DataGrid ItemsSource="{Binding SampleList}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <!-- Inputs --> 
       <DataGridTextColumn Width="SizeToCells" Header="Inputs" MinWidth="100" Binding="{Binding RowNum}" >     

        <DataGridTextColumn.ElementStyle> 
         <Style TargetType="{x:Type TextBlock}"> 
          <Setter Property="Background" Value="{Binding RowNum, Converter={StaticResource NameToBrushConverter}}"/> 
         </Style> 
        </DataGridTextColumn.ElementStyle> 

       </DataGridTextColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 

コンバータコード:

public class ColorConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      var input = int.Parse(value.ToString()); 
      switch (input) 
      { 
       case 1: 
        return Brushes.LightGreen; 
       case 2: 
        return Brushes.LightBlue; 
       case 3: 
        return Brushes.Yellow; 
       default: 
        return DependencyProperty.UnsetValue; 
      } 
     } 

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

この情報がお役に立てば幸いです。

1

値の範囲が有限である場合は、以下のアタッチを使用してXAMLで行うことができます。以下のコードでは、プロパティ名がStatus : intであると仮定し、行全体ではなく、含まれているセルのみを変更したいとします。 DisplayIndexの代わりにColumnという名前を使用するとHeaderというプロパティを使用することもできます。

<DataGrid x:Name="Dgrd"> 
     <DataGrid.CellStyle> 
      <Style TargetType="DataGridCell"> 
       <Style.Triggers> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Status}" Value="0"/> 
          <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Background" Value="Blue"/> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Status}" Value="1"/> 
          <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Background" Value="Red"/> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Status}" Value="2"/> 
          <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Background" Value="Yellow"/> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Status}" Value="3"/> 
          <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Background" Value="Olive"/> 
        </MultiDataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.CellStyle> 
    </DataGrid> 

また、Converterを使用することもできます。

+0

あなたのアプローチは完全に私にとってはうまくいかなかったようです。しかし、私はDataTrigerでバインドするためにこの部分を使用しました: 'Column.DisplayIndex、RelativeSource = {RelativeSource Self}' これは正しい値で結果のColumn全体を選択して、前。正しい値でセルの背景のみを変更することは可能ですか? – PL200

+0

@ PL200現在、列/行全体ではなく、1つのセルのみが変更されています。 – AnjumSKhan

+0

「ステータス」は列ヘッダーになります。はいですか?すべての列に対してこれを行う方法はありますか? – PL200

関連する問題