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

  • 相关阅读:
    CSS多行文字垂直居中的两种方法
    CSS3 选择器——基本选择器
    页面添加锚点的三种方式
    css3动画特效:上下晃动的div
    CSS3图片倒影技术实现及原理
    标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)
    JQuery中操作Css样式的方法
    22.从上往下打印二叉树 Java
    21.栈的压入、弹出序列 Java
    20.包含min函数的栈 Java
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2025104.html
Copyright © 2020-2023  润新知