初学WPF ,  希望对DataGrid 中所属的一个Column名下的值的颜色动态修改

<DataGridTextColumn Header="隐含回购利率(%)" Binding="{Binding ImpRepo, StringFormat={}{0:f4}}" MinWidth="60" IsReadOnly="True" />

但是使用如下语句并没有起作用:

Foreground="{Binding Path=ImpRepo,Converter={StaticResource IRRColorConvert}}"

IRRColorConvert定义在XAML前方:

<UserControl.Resources>

        <ResourceDictionary>         

            <local:IRRColorConvert x:Key="IRRColorConvert"/>

...........

IRRColorConvert代码如下:

 class IRRColorConvert : IValueConverter
{
public object Convert(object value, Type typeTarget, object param, CultureInfo culture)
{
double dValue = (double)value;
byte r, g, b = 0;
if (dValue >= 0)
{
if (dValue >= 5)
r = 254;
else
r = (byte)(int)(norlib.Maths.GetValue(new double[] { 0, 5 }, dValue, new double[] { 200, 255 }));
g = 89;
b = 61;
}
else
{
r = 56;
if (dValue <= -30)
g = 150;
else
g = (byte)(int)(norlib.Maths.GetValue(new double[] { -30, 0 }, dValue, new double[] { 150, 255 }));
b = 61;
}
return new SolidColorBrush(Color.FromRgb(r, g, b));
}
public object ConvertBack(object value, Type typeTarget, object param, CultureInfo culture)
{
return "";
}
}

后来才知道 Foreground 不是 DataGridTextColumn 的依赖项属性

关于这些概念请参看如下链接:

http://www.cnblogs.com/axzxs2001/archive/2010/04/25/1719857.html

http://blog.csdn.net/datoumimi/article/details/8033682

解决的办法如下,使用DataGridTemplateColumn+TextBlock 代替DataGridTextColumn

因为TextBlock的Foreground是Dependency Proeprty

可以比较MSDN:

DataGridTextColumn:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtextcolumn.foreground(VS.95).aspx

TextBlock:

http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.foreground.aspx

解决代码如下:

<DataGridTemplateColumn Header="隐含回购利率(%)" MinWidth="70" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ImpRepo, StringFormat={}{0:n2},UpdateSourceTrigger=PropertyChanged}" Foreground="{Binding Path=ImpRepo,Converter={StaticResource IRRColorConvert}}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

国外对此问题的一些说明:

http://social.msdn.microsoft.com/Forums/silverlight/en-US/86899afe-855e-422a-b07a-1f50c5f166fd/why-does-datagridtextcolumnforeground-etc-not-support-binding

http://stackoverflow.com/questions/5926849/datagridtextcolumn-how-to-bind-isreadonly

希望可以帮到大家

最新文章

  1. DragRow-GYF
  2. Fiddler-2 Fiddler抓包原理
  3. TableViewCell,TableView,UITableViewCell
  4. win安装NLTK出现的问题
  5. 用cryptico.js实现RSA加密(应对cryptico不支持PEM)
  6. 微信WeixinJSBridge API
  7. scp 使用
  8. pyqt 动态显示时间方法例子学习
  9. 密码算法详解——Simon
  10. C-最长回文子串(2)
  11. 微软的权限框架Asp.Net Identity
  12. 201521123008《Java程序设计》第11周学习总结
  13. pycharm安装和首次使用
  14. poj 1279 半平面交核面积
  15. 在思科模拟器上配置AAA认证
  16. Ubuntu 16.04 安装 arm-linux-gcc 交叉编译工具
  17. apache和tomcat的区别和联系
  18. 虚拟货币ICO是什么意思 看完秒懂
  19. 网络 --- 3 socket模块 粘包
  20. CSS样式学习-1

热门文章

  1. 走入asp.net mvc不归路:[5]Action的返回
  2. mac系统下为emacs设置中文字体,解决乱码问题
  3. Material-Animations
  4. java 调用ant的自己定义task,默认不是build.xml 的一点问题
  5. python day- 7 进本数据类型的先关知识点 set集合 深浅拷贝
  6. BZOJ2163: 复杂的大门
  7. Linux系统(Centos)下安装Java环境配置步骤详述
  8. js 原型继承和class继承
  9. YTU 2832: 使用指针访问数组元素--程序填空
  10. vi编辑器设置行号可见