Silverlight 4常用StringFormat格式总结

在Silverlight项目中,经常会根据需求的不同,提供不同的字符格式到客户端。这篇文章总结了目前Silverlight 4常用StringFormat绑定字符格式,方便大家在以后的开发中调用参考。

早期的格式转换方法

在Silverlight 4之前的版本,通常修改字符格式是通过实现IValueConverter接口,在IValueConverter接口中包含有两个方法:

1. Convert, 在绑定源数据传送到客户端显示前,转换修改数据;

2. ConvertBack,在目标数据传送到绑定源数据前,转换修改数据,该方法仅被用于“TwoWay”绑定模式;

例如,根据布尔型判断实现控件是否显示在客户端,下面是一个简单的转换代码,通过实现IValueConverter,判断控件Visibility属性值。

 

 1  public   class  VisibilityConverter : IValueConverter
 2 
 3  {
 4 
 5  public   object  Convert( object  value,Type targetType, object  parameter,CultureInfo culture)
 6 
 7  {
 8 
 9  bool  visibility  =  ( bool )value;
10 
11  return  visibility  ?  Visibility.Visible : Visibility.Collapsed;
12 
13  }
14 
15  public   object  ConvertBack( object  value,Type targetType, object  parameter,CultureInfo culture)
16 
17  {
18 
19  Visibility visibility  =  (Visibility)value;
20 
21  return  (visibility  ==  Visibility.Visible);
22 
23  }
24 
25  }

 

 

Silverlight 4的StringFormat属性

在Silverlight 4中,数据绑定SDK提供一个“StringFormat”的属性,该属性允许开发人员自由定义输出字符格式,例如,DataPicker控件,该控件提供SelectedDateFormat属性,控制其输出格式“短格式”或“长格式”。

SelectedDateFormat="Short", “默认”

Image00251

SelectedDateFormat="Long"

Image00252

而如果需要输出“April 01, 2011”格式,则无法使用SelectedDateFormat控制其格式,这时可以使用StringFormat属性完成需求。

<toolkit:DatePicker SelectedDate="{Binding DemoDate,Mode=TwoWay, StringFormat='MMM d, yyyy'}" />

Image00253

再例如,早期实现一段文字绑定信息需要按照以下格式操作:

<TextBlock Text=”当前登录用户: ”/>

<TextBlock Text=“{Binding Name}”/>

输出: 当前登录用户Jv9

在Silverlight 4中使用StringFormat属性,可以简单的实现如下:

<TextBlock Text=“{Binding Name, StringFormat=’当前登录用户: /{0/}’}”>

这样实现简单而又方便。

对于StringFormat属性的使用方法还有很多,下面使用实例演示常用的属性:

 

  1  < Grid  x:Name ="LayoutRoot" >
  2  < ScrollViewer  x:Name ="PageScrollViewer"  Style ="{StaticResource PageScrollViewerStyle}" >
  3  < StackPanel  Orientation ="Horizontal" >
  4  < StackPanel  x:Name ="ContentStackPanel" >
  5  < TextBlock  FontSize ="16"  TextWrapping ="Wrap"  Text ="StringFormat和字符串格式"  Margin ="8" />
  6  < Border  BorderBrush ="LightGray"  BorderThickness ="1"  Width ="300"  Margin ="5"  HorizontalAlignment ="Left" >
  7  < StackPanel  Orientation ="Vertical"  Margin ="5"   >
  8  < TextBox  x:Name ="txtSource"  Width ="125"  HorizontalAlignment ="Left" />
  9  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat='正在输入 &quot;/{0/}&quot;."  FontWeight ="Bold"  Margin ="0,4,0,2" />
 10  < TextBlock  Text ="{Binding Text, ElementName=txtSource, StringFormat='正在输入 &quot;/{0/}&quot;.'}"  TextWrapping ="Wrap"  Margin ="0,0,0,4" />
 11  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0/,20/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 12  < TextBlock  Text ="{Binding Text, ElementName=txtSource, StringFormat=/{0/,20/}}"  TextWrapping ="Wrap"  Margin ="0,0,0,4"   />
 13  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0/,-20/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 14  < TextBlock  Text ="{Binding Text, ElementName=txtSource, StringFormat=/{0/,-20/}}"  TextWrapping ="Wrap"  Margin ="0,0,0,4" />
 15  </ StackPanel >
 16  </ Border >
 17 
 18  < StackPanel  x:Name ="DatePanel" >
 19  < TextBlock  Text ="StringFormat和日期格式"  Margin ="8"  FontSize ="16"   />
 20  < Border  BorderBrush ="LightGray"  BorderThickness ="1"  Width ="300"  Margin ="5"  HorizontalAlignment ="Left" >
 21  < StackPanel  DataContext ="{StaticResource SampleDate}" >
 22  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=f"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 23  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=f}"  Margin ="8,0"   />
 24  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=F"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 25  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=F}"  Margin ="8,0"   />
 26  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=g"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 27  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=g}"  Margin ="8,0"   />
 28  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=G"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 29  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=G}"  Margin ="8,0"   />
 30  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=m"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 31  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=m}"  Margin ="8,0"   />
 32  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=y"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 33  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=y}"  Margin ="8,0"   />
 34  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=t"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 35  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=t}"  Margin ="8,0"   />
 36  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=T"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 37  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=T}"  Margin ="8,0"   />
 38  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=u"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 39  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=u}"  Margin ="8,0"   />
 40  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=o"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 41  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=o}"  Margin ="8,0"   />
 42  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=MM/dd/yy"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 43  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=MM/dd/yy}"  Margin ="8,0" />
 44  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=MMMM dd/, yyyy g"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 45  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=MMMM dd/, yyyy g}"  Margin ="8,0"   />
 46  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=hh:mm:ss.fff tt"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 47  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=hh:mm:ss.fff tt}"  Margin ="8,0"   />
 48  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0:r/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 49  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat=/{0:r/}}"  Margin ="8,0"   />
 50  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat='MMM d, yyyy'"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 51  < TextBlock  TextWrapping ="Wrap"  Text ="{Binding CurrentDateTime, StringFormat='MMM d, yyyy'}"  Margin ="8,0"   />
 52  </ StackPanel >
 53  </ Border >  
 54  </ StackPanel >
 55  </ StackPanel >
 56  < StackPanel  Orientation ="Vertical"   >
 57  < TextBlock  Text ="StringFormat和数字演示"  Margin ="8"  FontSize ="16" />
 58  < Border  BorderBrush ="LightGray"  BorderThickness ="1"  Width ="300"  Margin ="5"  HorizontalAlignment ="Left" >
 59  < StackPanel  Orientation ="Vertical"  Margin ="5" >
 60  < Grid  >
 61  < Grid.RowDefinitions >
 62  < RowDefinition  Height ="Auto" />
 63  < RowDefinition  Height ="Auto" />
 64  </ Grid.RowDefinitions >
 65  < Grid.ColumnDefinitions >
 66  < ColumnDefinition  Width ="Auto"  MinWidth ="18" />
 67  < ColumnDefinition />
 68  < ColumnDefinition  Width ="Auto"  MinWidth ="28" />
 69  </ Grid.ColumnDefinitions >
 70  < TextBlock  Text ="1"  HorizontalAlignment ="Left"  d:LayoutOverrides ="Height"   />
 71  < TextBlock  Text ="100,000"  d:LayoutOverrides ="Width, Height"  Grid.Column ="2"  Margin ="0"   />
 72  < Slider  x:Name ="BigNumSlider"  Margin ="0"  d:LayoutOverrides ="Height"  Grid.ColumnSpan ="3"  Grid.Row ="1"  Maximum ="100000"  Minimum ="1"  Value ="50000" />
 73  </ Grid >
 74  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=c"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 75  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider, Mode=TwoWay, StringFormat=c}"  Margin ="8,0" />
 76  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=目前拥有现金 /{0:C0/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 77  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider, Mode=TwoWay, StringFormat=目前拥有现金 /{0:C0/}}"  Margin ="8,0" />
 78  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=e"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 79  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider, Mode=TwoWay, StringFormat=e}"  Margin ="8,0" />
 80  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0:E4/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 81  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider, Mode=TwoWay, StringFormat=/{0:E4/}}"  Margin ="8,0" />
 82  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=n"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 83  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider, Mode=TwoWay, StringFormat=n}"  Margin ="8,0" />
 84  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0:N0/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 85  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider, Mode=TwoWay, StringFormat=/{0:N0/}}"  Margin ="8,0" />
 86  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat='###,###.##'"  FontWeight ="Bold"  Margin ="0,4,0,2" />
 87  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider, Mode=TwoWay, StringFormat='###,###.##'}"  Margin ="8,0"   />
 88  </ StackPanel >
 89  </ Border >
 90  < Border  BorderBrush ="LightGray"  BorderThickness ="1"  Width ="300"  Margin ="5"  HorizontalAlignment ="Left" >
 91  < StackPanel  Orientation ="Vertical"  Margin ="5" >
 92  < Grid  >
 93  < Grid.RowDefinitions >
 94  < RowDefinition  Height ="Auto" />
 95  < RowDefinition  Height ="Auto" />
 96  </ Grid.RowDefinitions >
 97  < Grid.ColumnDefinitions >
 98  < ColumnDefinition  Width ="Auto"  MinWidth ="18" />
 99  < ColumnDefinition />
100  < ColumnDefinition  Width ="Auto"  MinWidth ="28" />
101  </ Grid.ColumnDefinitions >
102  < TextBlock  Text ="-1"  HorizontalAlignment ="Left"  d:LayoutOverrides ="Height"   />
103  < TextBlock  Text ="1"  d:LayoutOverrides ="Width, Height"  Grid.Column ="2"  Margin ="0"   />
104  < Slider  x:Name ="BigNumSlider1"  Margin ="0"  d:LayoutOverrides ="Height"  Grid.ColumnSpan ="3"  Grid.Row ="1"  Maximum ="1"  Minimum ="-1"  Value ="0.2"  LargeChange ="0.1"  SmallChange ="0.01" />
105  </ Grid >
106  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=n"  FontWeight ="Bold"  Margin ="0,4,0,2" />
107  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider1, Mode=TwoWay, StringFormat=n}"  Margin ="8,0" />
108  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0:N4/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
109  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider1, Mode=TwoWay, StringFormat=/{0:N4/}}"  Margin ="8,0" />
110  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=p"  FontWeight ="Bold"  Margin ="0,4,0,2" />
111  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider1, Mode=TwoWay, StringFormat=p}"  Margin ="8,0" />
112  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0:P0/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
113  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider1, Mode=TwoWay, StringFormat=/{0:P0/}}"  Margin ="8,0" />
114  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0:E5/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
115  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider1, Mode=TwoWay, StringFormat=/{0:E5/}}"  Margin ="8,0" />
116  < TextBlock  TextWrapping ="Wrap"  Text ="StringFormat=/{0:C3/}"  FontWeight ="Bold"  Margin ="0,4,0,2" />
117  < TextBox  TextWrapping ="Wrap"  Text ="{Binding Value, ElementName=BigNumSlider1, Mode=TwoWay, StringFormat=/{0:C3/}}"  Margin ="8,0" />
118  </ StackPanel >
119  </ Border >
120  </ StackPanel >
121 
122  </ StackPanel >
123  </ ScrollViewer >
124  </ Grid >

 

 

源代码下载

在线演示

 

欢迎大家加入“专注Silverlight”QQ技术群,欢迎大家加入一起学习讨论Silverlight&WPF&Widnows Phone开发技术。 
22308706(一群) 超级群500人 
37891947(二群) 超级群500人 
100844510(三群) 高级群200人 
32679922(四群) 超级群500人 
23413513(五群) 高级群200人 
32679955(六群) 超级群500人 
61267622(七群) 超级群500人 
88585140(八群) 超级群500人 
128043302(九群 企业应用开发推荐群) 高级群200人 
101364438(十群) 超级群500人 
68435160(十一群 企业应用开发推荐群)超级群500人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值