[Avalon] Avalon中的Conditional Formatting.

博客介绍了Excel中Conditional Formatting功能,即设置条件满足时修改格子格式。在应用程序中实现此功能需较多代码,但Avalon集成了对此功能的支持,通过在数据绑定时挂接IValueConverter,可实现各种Conditional Formatting,完整程序可在Avalon的SDK中找到。

大家应该都知道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
或从这里下载

转载于:https://www.cnblogs.com/Cajon/archive/2005/08/22/220432.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值