当前位置: 首页 > news >正文

[Avalon] Avalon中的Conditional Formatting.

大家应该都知道Excel中的Conditional Formatting的功能吧。我们可以设置一些条件,当条件满足时修改格子的格式信息。

例如:一个学生成绩表中,我们可以设置当学生成绩低于60分时,将文字颜色改为红色。

如果我们要在我们的应用程序中实现这样的功能,就必须写比较多的代码。但是,在Avalon中集成了对此项功能的支持。下面是一个XAML描述。

None.gif    < Grid  Name ="mainGrid"  VerticalAlignment ="Top"  HorizontalAlignment ="Left" >
None.gif    
< Grid .Resources >
None.gif      
< c:bgConverter x:Key="BGConverter" />
None.gif
None.gif      
< DataTemplate  x:Key ="BookItemTemplate" >
None.gif        
< Grid >
None.gif          
< ColumnDefinition  Width ="250"  SharedSizeGroup ="BTitle"   />
None.gif          
< ColumnDefinition  Width ="100"  SharedSizeGroup ="BISBN"   />
None.gif          
< ColumnDefinition  Width ="*"  SharedSizeGroup ="BNPAGES"   />
None.gif          
< TextBlock  TextContent ="{Binding Path=Title}"  Grid.Column ="0"
None.gif            FontWeight
="Bold" />
None.gif          
< TextBlock  TextContent ="{Binding Path=ISBN}"  Grid.Column ="1" />
None.gif          
< Border  Grid.Column ="2"
None.gif            Background
="{Binding Path=NumPages,
None.gif              Converter={StaticResource BGConverter}}"
>
None.gif            
< TextBlock  TextContent ="{Binding Path=NumPages}" />
None.gif          
</ Border >
None.gif        
</ Grid >
None.gif      
</ DataTemplate >
None.gif
None.gif      
< Style  x:Key ="liStyle"  TargetType ="{x:Type ListBoxItem}" >
None.gif        
< Setter  Property ="Width"  Value ="Auto" />
None.gif      
</ Style >
None.gif    
</ Grid.Resources >
None.gif
None.gif    
< RowDefinition  Height ="80"   />
None.gif    
< RowDefinition  Height ="Auto"   />
None.gif    
< ColumnDefinition  Width ="250"   />
None.gif    
< ColumnDefinition  Width ="Auto"   />
None.gif    
< ColumnDefinition  Width ="*"   />
None.gif
None.gif    
< ListBox  Name ="lb"  Height ="500"  Width ="400"
None.gif      HorizontalAlignment
="Left"
None.gif      ItemsSource
="{Binding Path=BookTable}"
None.gif      ItemTemplate  ="{StaticResource BookItemTemplate}"
None.gif      ItemContainerStyle ="{StaticResource liStyle}"
None.gif      IsSynchronizedWithCurrentItem
="True"
None.gif      IsSelectionRequired
="True"
None.gif      Background
="Honeydew"
None.gif      Grid.IsSharedSizeScope
="true"
None.gif      Grid.Row
="0"  Grid.Column ="0"  Grid.ColumnSpan ="2" />
None.gif    
< TextBlock  TextContent ="{Binding Path=BookTable#.Count}"
None.gif      Grid.Row
="1"  Grid.Column ="0"   />
None.gif    
< Button  Click ="OnClick"  Grid.Row ="1"  Grid.Column ="1" > Add Record </ Button >
None.gif  
</ Grid >
None.gif

代码中用黄色标注的部分是实现Conditional Formatting的主要逻辑。我们再来看一下c:bgConverter的实现:
None.gif    public   class  bgConverter : IValueConverter
ExpandedBlockStart.gifContractedBlock.gif  
dot.gif {
InBlock.gif    
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif      
int numValue = (int)value;
InBlock.gif      
if (numValue < 350)
InBlock.gif        
return System.Windows.Media.Brushes.Green;
InBlock.gif      
else
InBlock.gif        
return System.Windows.Media.Brushes.Red;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif      
return null;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif  }

None.gif

Ok, 我们来看一下程序的运行效果。
ConditionalFormatting.GIF

如此就实现了“当书的页数多于350页时背景色改为红色”的功能。基本的实现方式就是在进行数据绑定时,提供了挂接IValueConverter的能力。开发人员可以在这里挂接自己的Converter,实现各种Conditional Formatting.

完整的程序可以在Avalon的SDK中找到。WinFS SDK->Simples->"Avalon" Simples->Technology Simples->Data->Data Binding->Binding with Data in an ADO DataSet Sample
或从这里下载

相关文章:

  • 转载:码根码的悲哀
  • [非技术]“西北风”新考:原来是菜和茶!
  • 配置好IIS中的SMTP服务器
  • 印象
  • 今天在做rss解析的时候碰到一个奇怪的难题
  • Microsoft Live全景图
  • 数据仓库分析图象展示--MSChart控件
  • 常见正则表达式运算 Regex 替换字符
  • 刘邦和项羽的民营企业管理
  • 4月11日,string这差距怎么就这么大呢
  • 人生如何成功:闯荡社会的50条忠告!
  • 爱情,你在哪里?
  • Community Server系列之十:让CS2支持中文搜索
  • 激情黄健翔
  • NHibernate学习笔记(二):one-to-one关系映射
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Angular 4.x 动态创建组件
  • angular2开源库收集
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Docker入门(二) - Dockerfile
  • Elasticsearch 参考指南(升级前重新索引)
  • magento2项目上线注意事项
  • mysql innodb 索引使用指南
  • PV统计优化设计
  • 机器学习 vs. 深度学习
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 跳前端坑前,先看看这个!!
  • 通过git安装npm私有模块
  • 温故知新之javascript面向对象
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 交换综合实验一
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​linux启动进程的方式
  • ​决定德拉瓦州地区版图的关键历史事件
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (转载)(官方)UE4--图像编程----着色器开发
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ./和../以及/和~之间的区别
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET和.COM和.CN域名区别
  • ::什么意思
  • @Bean有哪些属性
  • [ACTF2020 新生赛]Upload 1
  • [Android]使用Android打包Unity工程
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • [Java基础] Java中List.remove报错UnsupportedOperationException