Silverlight 5 beta新特性探索系列:8.Silverlight 5中自定义扩展标记

    在Silverlight 5中新增了自定义扩展标记,它通过继承于 MarkupExtension 类,重载该类中的ProvideValue方法以判断得到相应的返回值,以设置被绑定控件的属性。

        下面我们通过一个最为简单的实例来理解自定义扩展标记是如何工作的。

        第一步:新建一个UserMarkExtension.cs类,注意UserMark(扩展标记名)+Extension.cs(固定的后缀)=UserMarkExtension.cs

        第二步:设置3个可被访问的属性标签LBText,LBWidth,RcRadius

        第三步:重载PrivideValue函数,设置返回的属性值,

             三个步骤的UserMarkExtension.cs类代码如下:

复制代码
 
   
/// <summary>
/// 第一步:新建一个UserMarkExtension.cs类
/// 注意UserMark(扩展标记名)+Extension.cs(固定的后缀)=UserMarkExtension.cs
/// </summary>
public class UserMarkExtension : MarkupExtension
{
// 第二步:设置3个可被访问的属性LBText,LBWidth,RcRadius
public string LBText { get ; set ; }
public double LBWidth { get ; set ; }
public double RcRadius { get ; set ; }
// 第三步:重载PrivideValue函数,设置返回的属性值
public override object ProvideValue(IServiceProvider serviceProvider)
{
// 如果前台调用自定义标记时LBText值为Text,
if (LBText == " Text " )
{
return LBText = " 我是一个Text " ;
}
else if (RcRadius > 0 )
{
return RcRadius = 15 ;
}
else
{
return LBWidth = 99 ;
}

}
}
复制代码

        第四步:为需要设置自定义扩展标记的控件设置{local:UserMark LBText=Text},其含义为设置定制扩展标记local:UserMark,其属性LBText的值为Text,根据此值可以查询自定义扩展标记中PrivideValue函数,于是得到返回值“我是一个Text”。同理绑定其他属性值!现在我们看MainPage.xaml的代码如下:

<Grid x:Name= "LayoutRoot"  Background= "White" >
     <!--第四步:Content= "{local:UserMark LBText=Text}"
     设置定制扩展标记local:UserMark,设置其属性LBText的值为Text"-->
     <sdk:Label Height= "47"  HorizontalAlignment= "Left"
                Content= "{local:UserMark LBText=Text}"    Margin= "70,106,0,0"
                Name= "label1"  VerticalAlignment= "Top"  Width= "100"  />
     <sdk:Label Height= "47"  HorizontalAlignment= "Left"
                Content= "{local:UserMark LBWidth=1}"    Margin= "70,159,0,0"
                Name= "label2"  VerticalAlignment= "Top"  Width= "100"  />
     <Rectangle Height= "67"  HorizontalAlignment= "Left"
                Fill= "DarkRed"  RadiusX= "{local:UserMark RcRadius=1}"
                RadiusY= "{local:UserMark RcRadius=1}"     Margin= "223,106,0,0"
                Name= "rectangle1"  Stroke= "Black"  StrokeThickness= "1"
                VerticalAlignment= "Top"  Width= "116"  />
</Grid>

        在本实例中我们仅仅是最简单的演示了自定义扩展标记的使用方法和运行原理,个人觉得这个功能将会对MVVM的支持非常有益,大家可以试着扩展一下。

        本实例采用VS2010+Silverlight 5.0 beta编写,如需源码请点击 SL5MarkupExt.zip 下载。下面我们看运行效果图:

2011042217272234.jpg

推荐一下自己的蚂蜂窝游记:http://www.mafengwo.cn/u/cirojessie.html
本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/04/25/2025104.html,如需转载请自行联系原作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值