zoukankan      html  css  js  c++  java
  • 3 自定义控件之复杂属性连字符形式属性

    1 连字符形式的复杂属性

       image

    连字符形式的复杂属性:通过"复杂属性名称-子属性" 字符串格式提供追加到主控件的属性。

    2 相关特性                       
        2.1 PersistenceMod                                           
        持久化模式                                       
            Attribute
            InnerProperty :                                       
            InnerDefaultProperty :                                       
            EncodedInnerDefaultProperty:                   
        2.2 DesignerSerializationVisibility                                           
            Hidden:代码生成器不生成对象的代码。                                       
            Visible:代码生成器生成对象的代码。                                       
            Content:代码生成器产生对象内容的代码,而不是对象本身的代码。                                                       
        2.3 TypeConverter                                            
            类型转化器                                       

        2.4 [NotifyParentProperty(true)]                                            
            子属性改变是否通父属性。                                       

    3 示例:

    3.1 类代码

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.ComponentModel;

    namespace AspnetEssential.CustomerControl

    {

    /// <summary>

    /// Person

    /// </summary>

    /// <remarks>

    /// 复杂属性

    /// TypeConverter指定属性转换器

    /// </remarks>

    [TypeConverter(typeof(ExpandableObjectConverter) )]

    public class Person

    {

    private string _name;

    private int _age;

    /// <summary>

    /// 姓名

    /// </summary>

    /// <remarks>

    /// NotifyParentProperty:当子属性更改时通知父属性

    /// </remarks>

    [NotifyParentProperty(true)]

    public string Name

    {

    get

    {

    return _name;

    }

    set

    {

    _name = value;

    }

    }

    /// <summary>

    /// 年龄

    /// </summary>

    [NotifyParentProperty(true)]

    public int Age

    {

    get

    {

    return _age;

    }

    set

    {

    _age = value;

    }

    }

    }

    }

    3.2 控件代码

    using System;

    using System.Collections.Generic;

    using System.Collections.Specialized;

    using System.Text;

    using System.Web;

    using System.Web.UI;

    using System.ComponentModel;

    namespace AspnetEssential.CustomerControl.ControlProperty

    {

    /// <summary>

    /// PersonPropertyControl

    /// </summary>

    /// <remarks>

    /// 连字符形式的复杂标记

    /// </remarks>

    public class PersonPropertyControl : Control

    {

    private Person _person;

    public PersonPropertyControl()

    {

    _person = new Person();

    _person.Name = "姓名";

    _person.Age = 20;

    }

    [Category("复杂属性")]

    [Description("复杂属性")]

    public Person Person

    {

    get

    {

    return _person;

    }

    }

    /// <summary>

    /// PersonPro

    /// </summary>

    /// <remarks>

    /// 指定PersistenceMode属性

    /// 指定DesignerSerializationVisibility属性

    /// </remarks>

    [Category("复杂属性")]

    [Description("复杂属性")]

    [PersistenceMode(PersistenceMode.Attribute)]

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

    public Person PersonPro

    {

    get

    {

    return _person;

    }

    }

    /// <summary>

    /// Render

    /// </summary>

    /// <param name="writer"></param>

    protected override void Render(HtmlTextWriter writer)

    {

    writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "solid");

    writer.AddStyleAttribute(HtmlTextWriterStyle.BorderColor, "blue");

    writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px");

    writer.RenderBeginTag(HtmlTextWriterTag.Div);

    string text = string.Format("Name:{0} Age:{1}", _person.Name, _person.Age);

    writer.Write(text);

    writer.RenderEndTag();

    }

    }

    }

    3.3 效果

    属性编辑器中的效果:

    image

    当编辑PersonPro的Age与Name后,切换到代码视图,会看到持久化的字符串PersonPro-Age,PersonPro_Name。虽然Person也可以指定子属性
    但是它没有指定[PersistenceMode(PersistenceMode.Attribute)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    在属性编辑后在值只在内存中而没有持久化到页面上。

    image

  • 相关阅读:
    NeoFinder for Mac(增强型文件管理工具)破解版安装
    Monodraw for Mac(基于 ASCII 码设计编辑工具)破解版安装
    SNF开发平台WinForm-审核流使用方法样例
    SNF快速开发平台MVC-Grid++集成打印
    SNF快速开发平台MVC-富文本控件集成了百度开源项目editor
    C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集
    SNF快速开发平台MVC-EasyUI3.9之-WebApi和MVC-controller层接收的json字符串的取值方法和调用后台服务方法
    SNF快速开发平台--规则引擎在程序当中如何调用
    SNF快速开发平台--规则引擎介绍和使用文档
    SNF快速开发平台MVC-EasyUI3.9之-DataGrid表格控件如何增加右键菜单
  • 原文地址:https://www.cnblogs.com/hbb0b0/p/1880562.html
Copyright © 2011-2022 走看看