質問: wpf toolkitdatagridを使用してセルの背景色を変更するにはどうすればよいですか wpfツールキットデータグリッドを使用していますが、セルの内容に基づいて、行ではなくセルの背景色を設定したいと思います。簡単にするために、列をfooと呼び、セルの背景をfooが1の場合は青、fooが2の場合は赤、fooが3の場合は黄色、fooが3より大きい場合は緑にします。 。それができれば、対処する必要のあるより複雑なケースを解決できると確信しています。
回答: これは、stylesとdatatriggersを使用して行います。 elementstyleをデフォルトのbackgroundプロパティ(この場合はgreen)で設定し、その他の場合はdatatriggersを追加するだけです。<datagridtextcolumn binding="{binding whateveriwanttodisplay}" > <datagridtextcolumn.elementstyle> <style targettype="{x:type textblock}"> <setter property="background" value="green" /> <style.triggers> <datatrigger binding="{binding foo}" value="1"> <setter property="background" value="blue" /> </datatrigger> <datatrigger binding="{binding foo}" value="2"> <setter property="background" value="red" /> </datatrigger> <datatrigger binding="{binding foo}" value="2"> <setter property="background" value="yellow" /> </datatrigger> </style.triggers> </style> </datagridtextcolumn.elementstyle> </datagridtextcolumn> 別のアプローチは、コンバーターでバインディングを使用することです。<datagridtextcolumn binding="{binding whateveriwanttodisplay}" > <datagridtextcolumn.elementstyle> <style targettype="{x:type textblock}"> <setter property="background" value="{binding foo, converter={x:static my:footocolorconverter.instance}}" /> </style> </datagridtextcolumn.elementstyle> </datagridtextcolumn> このコンバーターで:public class footocolorconverter : ivalueconverter { public static readonly ivalueconverter instance = new footocolorconverter(); public object convert(object value, ... { int foo = (int)value; return foo==1 ? brushes.blue : foo==2 ? brushes.red : foo==3 ? brushes.yellow : foo>3 ? brushes.green : brushes.transparent; // for foo<1 } public object convertback(... { throw new notimplementedexception(); } } serge_gubenkoが与えた回答も同様に機能しますが、のみ fooプロパティ値は変更されないことに注意してください。これは、colorプロパティゲッターが1回だけ呼び出されるためです。彼のソリューションは、colorを読み取り専用のdependencypropertyに変更し、fooが割り当てられるたびに更新することで改善できますが、データモデルに色などのui固有の情報を含めることは一般に悪い考えであるため、お勧めしません。