ASP.NET 3.5核心编程学习笔记(55):自定义扩展程序控件的创建
ASP.NET并没有包含对扩展程序的具体实现。然而,它定义了供所有自定义扩展程序和ACT中所有扩展程序使用的基类ExtenderControl。我们可通过该类创建自己的扩展程序。但并不建议这样做,因为利用ACT库中的扩展程序更简便易行。
下面的代码给出了“焦点扩展程序”控件的源代码,这个简单的扩展程序能为目标控件添加高亮行为,以便在该控件获得焦点时更改其外观:
...
namespace Core35
{
[TargetControlType(typeof(Control)]
[ClientScriptResource("Core35.FocusBehavior", "focusBehavior.js")]
public string HighlightCssClass
{
get { return GetPropertyValue("HighlightCssClass", ""); }
set { SetPropertyValue("HighlightCssClass", value); }
}
[ExtenderControlProperty]
public string NoHighlightCssClass
{
get { return GetPropertyValue("NoHighlightCssClass", ""); }
set { SetPropertyValue("NoHighlightCssClass", value); }
}
}
TargetControlType特性用于指示该行为针对的控件类型。ClientScriptResource特性指示注入客户端页面的脚本类及相关源文件的名称。基类ExtenderControlBase定义在ACT库中。
我们在托管代码中所能做的是,定义自定义的属性集合。每个属性必须带有ExtenderControlProperty特性。属性本身并不直接负责值的存储,而仅限于通过基类GetPropertyValue和SetPropertyValue方法进行获得或设置。这些存储方法负责具体的存储工作。
AJAX扩展程序控件的核心部分是其JavaScript代码。焦点扩展程序所需的JavaScript代码如下:
Core35.FocusBehavior = function(element)
{
Core35.FocusBehavior.initializeBase(this, [element]);
this._highlightCssClass = null;
this._nohighlightCssClass = null;
}
Core35.FocusBehavior.prototype =
{
initialize : function()
{
Core35.FocusBehavior.callBaseMethod(this, 'initialize');
this._onfocusHandler = Function.createDelegate(this, this._onFocus);
this._onblurHandler = Function.createDelegate(this, this._onBlur);
$addHandlers(this.get_element(),
{ 'focus' : this._onFocus,
'blur' : this._onBlur },
this);
this.get_element().className = this._nohighlightCssClass;
},
dispose : function()
{
$clearHandlers(this.get_element());
Core35.FocusBehavior.callBaseMethod(this, 'dispose');
},
_onFocus : function(e)
{
if(this.get_element() && !this.get_element().disabled)
{
this.get_element().className = this._highlightCssClass;
}
},
_onBlur : function(e)
{
if(this.get_element() && !this.get_element().disabled)
{
tis.get_element().className = this._nohighlightCssClass;
}
},
get_highlightCssClass : function()
{
return this._highlightCssClass;
},
set_highlightCssClass : function(value)
{
if(this._highlightCssClass != value)
{
this._highlightCssClass = value;
this.raisePropertyChanged('highlightCssClass');
}
},
get_nohighlightCssClass : function()
{
return this._nohighlightCssClass;
},
set_nohighlightCssClass : function(value)
{
if(this._nohighlightCssClass != value)
{
this._nohighlightCssClass = value;
this.raisePropertyChanged('nohighlightCssClass');
}
}
}
//Optinal descriptor for JSON serialization
Core35.FocusBehavior.descriptor = {
properties : [ {name: 'highlightCssClass', type : String},
{name: 'nohighlightCssClass', type : String}]
}
//Register the class as a type tha inherits from Sys.UI.Control
Core35.FocusBehavior.registerClass('Core35.FocusBehavior', Sys.UI.Behavior);
在测试页面中,我们只需注册ACT程序集和包含这个焦点扩展程序的程序集,然后添加以下代码:
<asp:FocusExtender ID="FocusExtender1" runat="server"
TargetControlID="TextBox1"
NoHighlightCssClass="LowLightTextBox"
HighlightCssClass="HighLight" />
注意,为确保通过扩展程序应用以CSS样式优先于主题设置的样式,请将主题关闭。
转载于:https://www.cnblogs.com/free722/archive/2011/05/03/2035565.html
ASP.NET 3.5核心编程学习笔记(55):自定义扩展程序控件的创建相关推荐
- ASP.NET 3.5核心编程学习笔记(18):数据绑定表达式
简单数据绑定 数据绑定表达式是由<%...%>包裹的可执行代码,以#号为前缀.它可以通过DataBoundLiteralControl类的实例以编程方式加以管理. 数据绑定表达式通常从数据 ...
- ASP.NET 3.5核心编程学习笔记(17):基于数据源的数据绑定
从总体上讲,ASP.NET数据绑定模型可以分为三部分:数据绑定表达.传统数据源.数据源控件. 可用的数据源 在ASP.NET中,任何一个暴露IEnumerable接口的对象,都是有效的可绑定数据源.I ...
- ASP.Net学习笔记002--ASP.Net服务端控件做了什么2
ASP.Net学习笔记002--ASP.Net服务端控件做了什么2 以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交 ...
- vs2010 学习Silverlight学习笔记(8):使用用户控件
概要: 这个类似于封装控件样式.不过封装的是整个或是多个控件罢了,然后用的时候就可以直接引用过来了. 创建用户控: 这个也很简单,不过有几个地方需要注意下.这个就不照抄了,咱们也自己写一个. 步骤: ...
- java学习笔记(三):前端miniUI控件库入门
java学习笔记(三):前端miniUI控件库入门 最近在一家公司实习学习,一上来就需要学习了解相关的前端内容--miniUI.而这个内容自己本身并没有了解学习过,上手也是遇到了不少的问题,于是想把自 ...
- 学习笔记---母板页、用户控件、第三方控件及视图状态管理
一.母版页 在制作页面的过程中, 多个页面往往具有相同的页面Header和页面Footer, 多个页面只是在中间部分有变化. 那么我们完全可以避免在每个页面中都写一遍页头和页尾的代码, 这种技术就是母 ...
- 【C++】黑马程序员-C++核心编程学习笔记
前言 根据黑马程序员C++课程内容,结合讲义,将自己学习C++的过程中将自己觉得有必要记下的笔记进行整理,方便复习回顾,编程环境为VSCode. 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C ...
- 转 windows核心编程 学习笔记 目录
windows核心编程--SEH(结构异常处理) SEH 的工作原理. Windows 程序设计中最重要的理念就是消息传递,事件驱动.当GUI应用程序触发一个消息时,系统将把该消息放入 ...
- Android学习笔记26:图片切换控件ImageSwitcher的使用
在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...
最新文章
- 美多商城之商品(首页广告)
- LeetCode 52. N皇后 II
- 网站关键词优化的五大侧重点!
- 高性能dhcp服务器,基于线程池机制的高性能DHCP服务器研究与实现
- 自动监控主从MySQL同步的SHELL脚本
- 『Linux』ArchLinux与VirtualBox的结合「二」
- linux 内核部分崩溃,Linux 系统内核崩溃分析处理简介
- Windows 常用的 CMD 命令
- bert模型使用记录
- Java IO与NIO的区别
- 交易类APP原型设计分享 - 5miles
- ant Design Vue2.0+vite+vue3+typescript+node后台项目实现使用upload一个表单上传多个图片
- 众包专访:开源中国众包,让未来多一种可能
- 什么是Android性能,如何分析性能问题?
- 世界首款前置前驱混动8挡自动变速器山东潍坊问世
- 固件:BIOS和UEFI
- MindMapper16中文汉化版下载
- uni开发的H5接入QQ登录
- 百度“石榴算法”的发展趋势
- (备用)雨林木风 Ghost XP SP3
热门文章
- 交华为换机access配置_华为交换机Hybrid接口及基础配置
- webase crud查看所有表_Laravel-Gii 可视化代码生成工具 CRUD +GUI
- 160 - 25 CodeZero.1
- 从键盘输入一个字符,判断其是不是大写字母,如果是则请输出这个大写字母,如果不是请输出“这不是一个大写字母”的英文信息(要求:能连续输出直到输出“#”结束)。
- python免杀技术---复现+改进----1
- 远控免杀专题(29)-C#加载shellcode免杀-5种方式(VT免杀率8-70)
- redis 哨兵_Redis哨兵机制的原理介绍
- linux操作系统之exec函数族
- 【Java学习笔记六】常用数据对象之String
- UVa11426——欧拉函数