自定义控件的构建(10)
通过前面一系列的改进,我们已经可以初步构建出一个功能相对比较全面的控件了,那么,本篇关注一下我们一直忽略的地方,即如何在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)相关推荐
- euclidea4攻略_Euclidea几何构建10.4通关攻略
Euclidea几何构建全关卡通关攻略大全 玩腻味了哪些大开发商的游戏,小编给大家推荐一款挺有意思的小游戏Euclidea.Euclidea几何构建是一款具有理科生浪漫的游戏,这是一款数学几何风格的休 ...
- 自定义控件的构建(12)
Share 前面讲了模板的构建,我们忽略了一个细节,如果接触ASP.NET时间不长的话,一般都会看到数据表达式是<%#Eval('Name')%>这种形式的, 那么我们为什么用<%# ...
- javafx 自定义控件_JavaFX技巧10:自定义复合控件
javafx 自定义控件 用JavaFX编写自定义控件是一个简单直接的过程. 需要一个控件类来控制控件的状态(因此命名). 外观需要控件的外观. 而且通常不是用于自定义外观CSS文件. 控件的一种常见 ...
- 自定义控件的构建(5)
Share 在ASP.NET框架中支持在回传中保存值的有2种方式:视图状态和控件状态 视图状态 ASP.NET中几个对象属性与控件最为密切的,就是ViewState了. 这里对其做下说明,任何可序列化 ...
- java随机输出10计算题
方法1. public static void main(String[] args){ System.out.println("将开始10次加法测试"); Scanner sca ...
- Java 10新特性
Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...
- 苏宁官宣史上力度最大818:比京东便宜10%
苏宁易购集团高级副总裁顾伟今天对外宣布,苏宁将未来十年定义为"场景零售服务十年",由"零售商"升级为"零售服务商".同时,苏宁易购对品牌主张 ...
- 软件测试之构建测试---BVT
1. 构建的基本流程: a. 开发人员在他们的个人计算机上编写源代码文件 b. 他们将编写好的文件存放在一个统一集中的地方,构建组将所有的源代码编译成可以在计算机上运行的二进制文件,且用安装工具把各种 ...
- euclidea教程_euclidea全攻略_euclidea几何构建全关卡通关攻略_玩游戏网
Euclidea几何构建8.3通关攻略 Euclidea游戏8.3怎么过?下面小编为大家带来Euclidea几何构建8.3通关攻略:更多攻略不断更新中--Euclidea游戏全关卡通关攻略大全这一关分 ...
最新文章
- oralce 角色 权限
- python爬虫——利用BeautifulSoup4爬取糗事百科的段子
- Linux下的tr编辑器命令详解
- php jquery实现弹窗,jquery 弹出层实现代码_jquery
- 微信小程序自定义组件 插槽
- linux 安装servlet环境_linux下一键搭建LAMP环境安装网站全教程
- [Java] 蓝桥杯PREV-3 历届试题 带分数
- 学做‘视频剪辑’攻略
- Js 将数字转换为大写金额
- php免安装配置方法,mysql免安装版配置步骤详解
- Tuxera NTFS如何解决硬盘无法写入文件教程分享
- 激活win10专业版
- 如何将txt文件用shell拆分成多个?
- py从入门到实践 第四章
- 天涯明月刀无法显示服务器,天涯明月刀登录不进去怎么办 pc端手机端服务器已满怎么解决_游戏369...
- [python] 4.比心
- 前端MUI+H5+HBuilderX开发APP(IOS,android),后台Springboot,java学习与实践文章,更新中(二)
- OpenCore 版本升级后清除NVRAM
- 威尔逊置信区间 php,应用:推荐系统-威尔逊区间法
- 成都的IT研发产业和芯片产业等情况:2006年初的数据。(转)
热门文章
- python 链接数据库
- D3 二次方曲线与切线
- layui tab html,layui竖版tab选项卡
- LIST函数JAVA特点_Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)...
- Java设计模式学习总结(13)——结构型模式之享元模式
- Redis学习总结(4)——Spring Data操作Redis
- Java Web学习总结(29)——Java Web中的Filter和Interceptor比较
- 构造函数 返回值_JavaScript构造函数的简单介绍
- python释放变量内存_python解释器安装,运行python程序的方式及程序运行的步骤,变量与自动的内存管理...
- 深入理解jvm jdk1,7(1)