• web控件开发系列(四) 自定义控件属性(下)


    控件在WEB开发时经常要用到,虽然有部分已经存在工具箱里,但有时总需要根据自己的要求,开发一些合适自己的控件。接上一节,已经说过了控件的属性, 例如,我们需要一组属性的集合时,这时我们需要用到的就是复杂属性了,简单的属性满足不了我们的要求,例如:大家熟悉的字体信息设置那栏。下面为大家介绍一下实现的几种代码与注意细节

    一、连字符形式的复杂属性标记
    <asp:Button ID="Button1" runat="server" Font-Bold="True" Font-Italic="True" Font-Names="Arial" Font-Overline="True" Font-Size="20pt" Text="Button" />
    例如上面就是一个Font的复杂属性,通过这个属性可以设置一系列相关的值。
    在ServerControl中添加一个类ComplexAttribute,然后输入下面代码:

    Code

    注意细节,不然你会感觉到很多地方不明白:
    1、Student类,在设计时最好封装起来,添加密封限制,让这个类无法继承。
    2、Student类的属性添加特性[NotifyParentProperty(true)]
    3、构造函数ComplexAttribute时初始化Student类,不然设计器中你的控件会出现未引用对象的错误提示。
    4、ComplexAttribute类的属性添加特性[PersistenceMode(PersistenceMode.Attribute)]   //指定如何将服务器控件属性或事件保持到ASP.NET页面的元数据属性
    5、ComplexAttribute类的属性添加特性[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  //指定属性是否以及如何在代码中序列化
    6、ComplexAttribute类的属性添加特性[TypeConverter(typeof(ExpandableObjectConverter))]  //指定用作此特性所绑定到的对象的转换器的类型
    7、ComplexAttribute类的属性添加特性[NotifyParentProperty(true)]

    PersistenceMode详解:
    指定如何将服务器控件属性或事件保持到ASP.NET页面的元数据属性,共存在4种枚举设置方式:
    1、PersistenceMode(PersistenceMode.Attribute)指定属性或事件保持为属性;
    2、PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)指定属性作为服务器控件的唯一内部文本,如果属性值是HTML编码的,只能对字符串作这种指定;
    3、PersistenceMode(PersistenceMode.InnerDefaultProperty)指定属性在服务器控件中保持为内部文本,还指示将该属性定义为元素的默认属性,只能指定一个属性为默认属性;
    4、PersistenceMode(PersistenceMode.InnerProperty)指定属性在服务器控件中保持为嵌套标记,通常用于复杂对象,它们具有自己的持久性属性。
    DesignerSerializationVisibility详解:
    指定属性是否以及如何在代码中序列化,其值为DesignerSerializationVisibility的枚举值,存在3种设置方式:
    1、DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)指定序列化程序不应该序列化属性值;
    2、DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)指定应该允许序列化程序序列化属性的值;
    3、DesignerSerializationVisibility(DesignerSerializationVisibility.Content)指定序列化程序应该序列化属性的内容,而不是属性本身。此字段为只读。Visible为其默认值。

    编译,在页面上拖进控件,再看一下属性窗口,你自己定义的属性就在里面了,如下图:


    设置Student属性,到页面代码视图,就会出现下面的代码:
     <cc1:ComplexAttribute ID="ComplexAttribute1" runat="server" Student-Age="10" Student-Cost="95" Student-Name="ASP.NET" />

    二、内部嵌套复杂属性标记

    <asp:GridView ID="GridView1" runat="server">
        <RowStyle BackColor="#EFF3FB" />
    </asp:GridView>
    例如上面的代码,BackColor属性RowStyle是内部嵌套。
    在ServerControl中添加一个类InRowAttribute然后输入下面代码:

    Code

    编译后在设计器中拖进这个控件,在属性窗口设置值,在代码视图中可以看到下面的代码
    <cc1:InRowAttribute ID="InRowAttribute1" runat="server">
        <BackColorStyle BackColor="ActiveBorder"></BackColorStyle>
    </cc1:InRowAttribute>

    属性定定义方面还有好多类型,例如我们常用的ListItem组合, CheckBox组合, 或自己需要时定义的边框线条,边框大小,颜色等等,这些都是大家在开发中慢慢摸索(举一反百)吧,如果大家有好的控件,不防也与我分享一下。

  • 相关阅读:
    查看电脑或者服务器sqlserver端口命令
    cvc-elt.1: Cannot find the declaration of element 'beans'Failed to read schema document 'http://www.springframework.org/schema/beans/spring- beans-3.0.xsd'
    彻底卸载注册表、流氓软件的工具Uninstall Tool
    sqlserver安装报错:an error was encountered 数据无效
    导入虚拟机vmware,此主机支持Intel VT-x,但Intel VT-x处于禁用状态和黑屏
    设计模式----观察者模式通俗实例
    设计模式----策略模式通俗实例
    设计模式----代理模式通俗实例
    简单的纯js三级联动
    linux安装windows启动盘
  • 原文地址:https://www.cnblogs.com/whtydn/p/1566818.html
Copyright © 2020-2023  润新知