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 下载。下面我们看运行效果图:

时间: 2024-11-08 18:29:01

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

Silverlight 5 beta新特性探索系列:6.Silverlight 5新增低延迟声音效果类SoundEffect.支持wav音乐格式【附带源码实例】

在Silverlight 5中新增了一个SoundEffect类和SoundEffectInstance类用以加载wav格式的音乐,这样可以很及时的为动画添加音效. 现在我们看如何使用这两个类来控制播放wav音乐,首先引入mav音乐格式的文件(音频采样大小必须为16或者8位不能是24位,采用PCM编码,22.5, 44.1 or 48khz的采样率)如下图属性: 其次将引入的wav格式音乐文件在项目中右键点击其属性设置其"生成操作"为"内容",如下图所示: 现在我们

Silverlight 5 beta新特性探索系列:4.Silverlight 5 beta中鼠标双击/鼠标多重点击的实现

在Silverlight 5中新增了鼠标双击和多重点击的实现,当然在这里包括鼠标左键和鼠标右键的双击,多重点击.在Silverlight 5的MouseButtonEventArgs类中新增了一个属性名为ClickCount:获取到触发事件源在单位时间内被点击的次数(注意:单位时间是由操作系统的"控制面板"-->"鼠标"-->"双击速度"设置的). 下面我们来看一个实例以判断是否双击还是多重点击,首先我们看实例的XAML代码: <

Silverlight 5 beta新特性探索系列:1.安装Silverlight 5 beta环境以及OOB模式下Silverlight 5 多窗口支持

Silverlight 5 beta版本总算于昨日放出,怀着激动的心情今天将开发环境更新为Silverlight 5 beta版本,并且接触Silverlight 5 beta的第一个新特性:OOB模式下的多窗口的弹出显示. 现在我们开始Silverlight 5 Beta版本的安装,首先需要为VS2010打一个VS2010 SP1补丁,然后我们再下载Silverlight 5 Beta Tools for Visual Studio SP1,一步一步安装完毕,最后我们下载Silverlight

Silverlight 5 beta新特性探索系列:3.Silverlight5中的文字增进控制【附带实例源码】

在Silverlight 5中新增了CharacterSpacing属性对文字间距进行控制,增加了RichTextBoxOverflow控件以灵活的对大量文字进行合理的排版显示. 一.CharacterSpacing属性 在Silverlight原来的版本中文字和文字之间并没有一个间距控制属性,这让某一些特殊的文字显示场合排版不易(比如杂志,电子报),在Silverlight 5中引入的CharacterSpacing属性就可以很好处理文字间距,它可用做TextBlock,RichTextBox

Silverlight 5 beta新特性探索系列:2.在XAML代码中设置断点和Binding绑定调试【附带源码实例】

在Silverlight之前的版本中都不能在XAML代码中设置断点以跟踪调试的,在Silverlight 5 beta版中我们将能够为Binding数据的XAML代码设置断点以跟踪调试相应的数据绑定过程. 首先我们新建一个Silverlight 5应用程序,然后准备后台数据代码如下以绑定一个DataGrid控件. public MainPage() { InitializeComponent(); List<CityInformation> cityList=new List<CityI

Silverlight 5 beta新特性探索系列:7.结合上层元素属性绑定和Style Setter上的绑定

   在Silverlight 5中添加了相对上层元素属性的绑定,还有Style Setter也可以绑定数据.         一.相对上层元素属性的绑定        它是在元素内部的子孙级元素中的某一些属性可以绑定为祖先级元素的某一些属性.比如说再一个ListBox的Tag元素值为:"这是第一个父级绑定",在ListBox.Templete下面添加一个TextBlock元素的Text属性设置为 <TextBlock Text="{Binding Tag,Relati

Silverlight 5 RC新特性探索系列:14.Silverlight 5 RC 对字体呈现的改进

     在Silverlight 5 RC版本中对字体呈现做出了比较大的优化,它现在新增了一个类TextOptions,其内部有三个依赖属性TextFormattingMode.TextHintingMode.TextRenderingMode.对字体的呈现模式进行了定义.    1.TextFormattingMode         它有两种格式化模式,是对字体的格式化进行设置         1.1 Display:它使用度量来格式化字体和符号,会让字体显示得更加清晰,        

Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持

     在Silverlight 5 RC版本中新增了对并行任务库(Task Parallel Library)的支持,Task Parallel Library简称TPL,它是指一个或者多个任务同时运行,类似线程或者线程池.在本例中将会以并行任务库和异步获取数据进行对比.  首先新建一个Silverlight 5项目,在其Web项目中添加一个新的xml文件helloWorld.xml.编写代码如下: <?xml version="1.0" encoding="utf

Silverlight 5 RC新特性探索系列:12.Silverlight 5 RC 窗口模式下访问自定义DLL和WIN32 API

  在Silverlight 5 RC版本中针对访问权限进行了相应的提升,它的项目属性中新增了一个复选框"在浏览器内运行时需要提升的信任",如下图:          它将为在浏览器模式下运行的应用程序提升一些访问权限,例如我的上篇SaveFileDialog保存文件指定默认名称---OpenFileDialog打开文件指定默认路径就需要提升权限.另外在其OOB模式下也进行了相应的提升,比如访问WIN 32 API,或者访问在C:\Windows\System32目录下的自己编写的DL