博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight 5 beta新特性探索系列:8.Silverlight 5中自定义扩展标记
阅读量:6084 次
发布时间:2019-06-20

本文共 2012 字,大约阅读时间需要 6 分钟。

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

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

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

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

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

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

 

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

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

 
  1. <Grid x:Name="LayoutRoot" Background="White"
  2.     <!--第四步:Content="{local:UserMark LBText=Text}", 
  3.     设置定制扩展标记local:UserMark,设置其属性LBText的值为Text"--> 
  4.     <sdk:Label Height="47" HorizontalAlignment="Left" 
  5.                Content="{local:UserMark LBText=Text}"   Margin="70,106,0,0" 
  6.                Name="label1" VerticalAlignment="Top" Width="100" /> 
  7.     <sdk:Label Height="47" HorizontalAlignment="Left" 
  8.                Content="{local:UserMark LBWidth=1}"   Margin="70,159,0,0" 
  9.                Name="label2" VerticalAlignment="Top" Width="100" /> 
  10.     <Rectangle Height="67" HorizontalAlignment="Left" 
  11.                Fill="DarkRed" RadiusX="{local:UserMark RcRadius=1}" 
  12.                RadiusY="{local:UserMark RcRadius=1}"    Margin="223,106,0,0" 
  13.                Name="rectangle1" Stroke="Black" StrokeThickness="1" 
  14.                VerticalAlignment="Top" Width="116" /> 
  15. </Grid> 
        在本实例中我们仅仅是最简单的演示了自定义扩展标记的使用方法和运行原理,个人觉得这个功能将会对MVVM的支持非常有益,大家可以试着扩展一下。

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

本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/826415

转载地址:http://ibuwa.baihongyu.com/

你可能感兴趣的文章
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>