私の質問がここですでにいくつかの方法で述べられ、回答されたことを知っています。しかし、思い通りに動かすことができません。タイトルが示すように、内容に応じてデータグリッドセルの背景色を変更しようとしています。私はWPFに比較的慣れていませんが、解決策はバインディングと組み合わせたコンバーターだと思います。目標は、4 つの状態を持つ列挙型である "Status" と呼ばれるプロパティに応じて、セルの背景色を変更することです。
私はすでにコンバーターを書いています:
using System;
using System.Windows.Data;
using System.Drawing;
using System.Windows;
namespace Admin
{
[ValueConversion(typeof(Member.UserStatus), typeof(Brushes))]
public class StatusToColorConverter : IValueConverter
{
#region IValueConverter Member
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var enumValue = (Member.UserStatus)value;
if(enumValue == Member.UserStatus.Change)
return Brushes.Red;
if(enumValue == Member.UserStatus.Import)
return Brushes.Blue;
if(enumValue == Member.UserStatus.Remove)
return Brushes.Orange;
if(enumValue == Member.UserStatus.Synced)
return Brushes.Green;
else
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
}
ここまでは順調ですね。xaml 部分は次のようになります (いくつかのグーグルの後...)
<DataGrid.Columns>
<DataGridTemplateColumn Header="Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}" Background="{Binding Status, Converter={StaticResource StatusToColorConverter}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
DataGridTemplateColums と DataTemplates が何であるかは (まだ) わかりません。しかし、私はCellStyleと私が覚えていない別の方法で同じことを試みました. コンバーターにはブレークポイントがあり、私が試したすべてのソリューションで呼び出されます。しかし、どういうわけか、「Background」プロパティはコンバーターからの戻り値を無視しているようです。したがって、私の過ち (または私の理解不足) には別の原因があると思います。
誰かが私を正しい方向に向けたいと思っていますか?