ASP.NET并没有包含对扩展程序的具体实现。然而,它定义了供所有自定义扩展程序和ACT中所有扩展程序使用的基类ExtenderControl。我们可通过该类创建自己的扩展程序。但并不建议这样做,因为利用ACT库中的扩展程序更简便易行。

  下面的代码给出了“焦点扩展程序”控件的源代码,这个简单的扩展程序能为目标控件添加高亮行为,以便在该控件获得焦点时更改其外观:

using AjaxControlToolkit;
...

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代码如下:

Type.registerNamespace('Core35');

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:TextBox ID="TextBox1" runat="server" EnableTheming="false" />
<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):自定义扩展程序控件的创建相关推荐

  1. ASP.NET 3.5核心编程学习笔记(18):数据绑定表达式

    简单数据绑定 数据绑定表达式是由<%...%>包裹的可执行代码,以#号为前缀.它可以通过DataBoundLiteralControl类的实例以编程方式加以管理. 数据绑定表达式通常从数据 ...

  2. ASP.NET 3.5核心编程学习笔记(17):基于数据源的数据绑定

    从总体上讲,ASP.NET数据绑定模型可以分为三部分:数据绑定表达.传统数据源.数据源控件. 可用的数据源 在ASP.NET中,任何一个暴露IEnumerable接口的对象,都是有效的可绑定数据源.I ...

  3. ASP.Net学习笔记002--ASP.Net服务端控件做了什么2

    ASP.Net学习笔记002--ASP.Net服务端控件做了什么2 以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交 ...

  4. vs2010 学习Silverlight学习笔记(8):使用用户控件

    概要: 这个类似于封装控件样式.不过封装的是整个或是多个控件罢了,然后用的时候就可以直接引用过来了. 创建用户控: 这个也很简单,不过有几个地方需要注意下.这个就不照抄了,咱们也自己写一个. 步骤: ...

  5. java学习笔记(三):前端miniUI控件库入门

    java学习笔记(三):前端miniUI控件库入门 最近在一家公司实习学习,一上来就需要学习了解相关的前端内容--miniUI.而这个内容自己本身并没有了解学习过,上手也是遇到了不少的问题,于是想把自 ...

  6. 学习笔记---母板页、用户控件、第三方控件及视图状态管理

    一.母版页 在制作页面的过程中, 多个页面往往具有相同的页面Header和页面Footer, 多个页面只是在中间部分有变化. 那么我们完全可以避免在每个页面中都写一遍页头和页尾的代码, 这种技术就是母 ...

  7. 【C++】黑马程序员-C++核心编程学习笔记

    前言 根据黑马程序员C++课程内容,结合讲义,将自己学习C++的过程中将自己觉得有必要记下的笔记进行整理,方便复习回顾,编程环境为VSCode. 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C ...

  8. 转 windows核心编程 学习笔记 目录

    windows核心编程--SEH(结构异常处理) SEH 的工作原理.         Windows 程序设计中最重要的理念就是消息传递,事件驱动.当GUI应用程序触发一个消息时,系统将把该消息放入 ...

  9. Android学习笔记26:图片切换控件ImageSwitcher的使用

    在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...

最新文章

  1. 美多商城之商品(首页广告)
  2. LeetCode 52. N皇后 II
  3. 网站关键词优化的五大侧重点!
  4. 高性能dhcp服务器,基于线程池机制的高性能DHCP服务器研究与实现
  5. 自动监控主从MySQL同步的SHELL脚本
  6. 『Linux』ArchLinux与VirtualBox的结合「二」
  7. linux 内核部分崩溃,Linux 系统内核崩溃分析处理简介
  8. Windows 常用的 CMD 命令
  9. bert模型使用记录
  10. Java IO与NIO的区别
  11. 交易类APP原型设计分享 - 5miles
  12. ant Design Vue2.0+vite+vue3+typescript+node后台项目实现使用upload一个表单上传多个图片
  13. 众包专访:开源中国众包,让未来多一种可能
  14. 什么是Android性能,如何分析性能问题?
  15. 世界首款前置前驱混动8挡自动变速器山东潍坊问世
  16. 固件:BIOS和UEFI
  17. MindMapper16中文汉化版下载
  18. uni开发的H5接入QQ登录
  19. 百度“石榴算法”的发展趋势
  20. (备用)雨林木风 Ghost XP SP3

热门文章

  1. 交华为换机access配置_华为交换机Hybrid接口及基础配置
  2. webase crud查看所有表_Laravel-Gii 可视化代码生成工具 CRUD +GUI
  3. 160 - 25 CodeZero.1
  4. 从键盘输入一个字符,判断其是不是大写字母,如果是则请输出这个大写字母,如果不是请输出“这不是一个大写字母”的英文信息(要求:能连续输出直到输出“#”结束)。
  5. python免杀技术---复现+改进----1
  6. 远控免杀专题(29)-C#加载shellcode免杀-5种方式(VT免杀率8-70)
  7. redis 哨兵_Redis哨兵机制的原理介绍
  8. linux操作系统之exec函数族
  9. 【Java学习笔记六】常用数据对象之String
  10. UVa11426——欧拉函数