Share

通过前面一系列的改进,我们已经可以初步构建出一个功能相对比较全面的控件了,那么,本篇关注一下我们一直忽略的地方,即如何在VS设计器中显示。

设计器体验

这主要有两种方式:控件设计时特性与关联ControlDesigner,下面一一介绍:

控件设计时特性用于修改控件的属性在设计视图中如何显示,其中一些特性可以直接应用到控件本身,一些可以用到控件的属性上

比如讲Description用于指定属性的说明信息,这个部分比较丰富,可以通过UITypeEditor类查看包含的编辑器列表,

我们先定义一个控件,看看这些特性是如何用的

    public class DefaultTitleControl:WebControl
    {
        private string _title="Title";
        [Category("Control Title")]
        [Description("title")]
        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }
        protected override void RenderContents(HtmlTextWriter writer)
        {
            writer.RenderBeginTag(HtmlTextWriterTag.H1);
            writer.Write(_title);
            writer.RenderEndTag();
        }
        protected override HtmlTextWriterTag TagKey
        {
            get { return HtmlTextWriterTag.Div; }
        }
    }

代码很简洁,看看当我们在页面上放置一个控件时,设计视图所呈现的

其中Title属性在属性窗口中关联了类别和说明,相信你看完截图后,就什么都明白了,不解释。

主要说另一种方式,即创建ControlDesigner,其可以改变自定义控件在设计视图中的外观,和上面的一样,我们也只关注其中的一个特性即可

创建一个可以从工具箱中拖拉其它控件到自定义的控件

  /// <summary>
    ///允许在设计视图中拖入其他控件
    /// </summary>
    public enum GradientDirection
    {
        Vertical=0,
        Horizontal=1
    }
     [Designer(typeof(DragDesinger))]
     [ParseChildren(false)]
    public class DragOtherControl : WebControl
    {
        public DragOtherControl()
        {
            this.Width = Unit.Parse("500px");
        }
        private GradientDirection _dragDirection = GradientDirection.Horizontal;
        private Color _startColor = Color.DarkBlue;
        public Color StartColor
        {
            get { return _startColor; }
            set { _startColor = value; }
        }
        private Color _endColor = Color.White;
        public Color EndColor
        {
            get { return _endColor; }
            set { _endColor = value; }
        }
        public GradientDirection Direction { get; set; }
        protected override HtmlTextWriterTag TagKey
        {
            get { return HtmlTextWriterTag.Div; }
        }
        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            writer.AddStyleAttribute(HtmlTextWriterStyle.Filter, this.GetFilterString());
            base.AddAttributesToRender(writer);
        }
        public string GetFilterString()
        {
            return string.Format("progid:DXImageTransform.Mircosoft.Gradient(gradientType={0},startColorStr={1},endColorStr={2})", _dragDirection.ToString("d"), ColorTranslator.ToHtml(_startColor), ColorTranslator.ToHtml(_endColor));
        }
    }
    public class DragDesinger:ContainerControlDesigner
    {
        protected override void AddDesignTimeCssAttributes(IDictionary styleAttributes)
        {
            DragOtherControl drager = (DragOtherControl)this.Component;
            styleAttributes.Add("filter",drager.GetFilterString());
            base.AddDesignTimeCssAttributes(styleAttributes);
        }
    }
  上面定义的DragOtherControl使用了IE滤镜创建渐变背景,这里的功能实现不是重点, 同时定义了DragDesinger类,你可以看到实际上DragOtherControl被
  DragDesinger修饰了,这样如果从工具箱中拖动其它控件到DragOtherControl中时,就可以作为其子元素存在,比如拖一个CheckBox:
   <userExpr:DragOtherControl ID="DragOtherControl1" runat="server">
        <asp:CheckBox ID="CheckBox1" runat="server" />
   </userExpr:DragOtherControl>  

本文参考了《ASP.NET 3.5揭秘》

转载于:https://www.cnblogs.com/626498301/archive/2010/08/09/1795399.html

自定义控件的构建(10)相关推荐

  1. euclidea4攻略_Euclidea几何构建10.4通关攻略

    Euclidea几何构建全关卡通关攻略大全 玩腻味了哪些大开发商的游戏,小编给大家推荐一款挺有意思的小游戏Euclidea.Euclidea几何构建是一款具有理科生浪漫的游戏,这是一款数学几何风格的休 ...

  2. 自定义控件的构建(12)

    Share 前面讲了模板的构建,我们忽略了一个细节,如果接触ASP.NET时间不长的话,一般都会看到数据表达式是<%#Eval('Name')%>这种形式的, 那么我们为什么用<%# ...

  3. javafx 自定义控件_JavaFX技巧10:自定义复合控件

    javafx 自定义控件 用JavaFX编写自定义控件是一个简单直接的过程. 需要一个控件类来控制控件的状态(因此命名). 外观需要控件的外观. 而且通常不是用于自定义外观CSS文件. 控件的一种常见 ...

  4. 自定义控件的构建(5)

    Share 在ASP.NET框架中支持在回传中保存值的有2种方式:视图状态和控件状态 视图状态 ASP.NET中几个对象属性与控件最为密切的,就是ViewState了. 这里对其做下说明,任何可序列化 ...

  5. java随机输出10计算题

    方法1. public static void main(String[] args){ System.out.println("将开始10次加法测试"); Scanner sca ...

  6. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

  7. 苏宁官宣史上力度最大818:比京东便宜10%

    苏宁易购集团高级副总裁顾伟今天对外宣布,苏宁将未来十年定义为"场景零售服务十年",由"零售商"升级为"零售服务商".同时,苏宁易购对品牌主张 ...

  8. 软件测试之构建测试---BVT

    1. 构建的基本流程: a. 开发人员在他们的个人计算机上编写源代码文件 b. 他们将编写好的文件存放在一个统一集中的地方,构建组将所有的源代码编译成可以在计算机上运行的二进制文件,且用安装工具把各种 ...

  9. euclidea教程_euclidea全攻略_euclidea几何构建全关卡通关攻略_玩游戏网

    Euclidea几何构建8.3通关攻略 Euclidea游戏8.3怎么过?下面小编为大家带来Euclidea几何构建8.3通关攻略:更多攻略不断更新中--Euclidea游戏全关卡通关攻略大全这一关分 ...

最新文章

  1. oralce 角色 权限
  2. python爬虫——利用BeautifulSoup4爬取糗事百科的段子
  3. Linux下的tr编辑器命令详解
  4. php jquery实现弹窗,jquery 弹出层实现代码_jquery
  5. 微信小程序自定义组件 插槽
  6. linux 安装servlet环境_linux下一键搭建LAMP环境安装网站全教程
  7. [Java] 蓝桥杯PREV-3 历届试题 带分数
  8. 学做‘视频剪辑’攻略
  9. Js 将数字转换为大写金额
  10. php免安装配置方法,mysql免安装版配置步骤详解
  11. Tuxera NTFS如何解决硬盘无法写入文件教程分享
  12. 激活win10专业版
  13. 如何将txt文件用shell拆分成多个?
  14. py从入门到实践 第四章
  15. 天涯明月刀无法显示服务器,天涯明月刀登录不进去怎么办 pc端手机端服务器已满怎么解决_游戏369...
  16. [python] 4.比心
  17. 前端MUI+H5+HBuilderX开发APP(IOS,android),后台Springboot,java学习与实践文章,更新中(二)
  18. OpenCore 版本升级后清除NVRAM
  19. 威尔逊置信区间 php,应用:推荐系统-威尔逊区间法
  20. 成都的IT研发产业和芯片产业等情况:2006年初的数据。(转)

热门文章

  1. python 链接数据库
  2. D3 二次方曲线与切线
  3. layui tab html,layui竖版tab选项卡
  4. LIST函数JAVA特点_Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)...
  5. Java设计模式学习总结(13)——结构型模式之享元模式
  6. Redis学习总结(4)——Spring Data操作Redis
  7. Java Web学习总结(29)——Java Web中的Filter和Interceptor比较
  8. 构造函数 返回值_JavaScript构造函数的简单介绍
  9. python释放变量内存_python解释器安装,运行python程序的方式及程序运行的步骤,变量与自动的内存管理...
  10. 深入理解jvm jdk1,7(1)