.Text中的Advanced Panel学习笔记

news/2024/6/25 0:09:30

.Text中的用户文章管理界面是使用Advanced Panel的主要界面。Advanced Panel与普通WebPanel相比,多提供一个Header栏,并且可以不使用任何代码实现折叠[Collapsing]功能,这是该控件最有特色的地方。

控件常用属性
1. Collapsible属性
    该属性为bool型,如果为true,该控件会在右侧显示一个折叠按钮,用于显示或隐藏Panel所包含的内容。否则不显示按钮,该控件变为不可折叠的panel。
2. Collapsed属性
    该属性为bool型,默认值为false,初始化时会显示panel容器中的所有内容;如果为true,初始化时,panel容器中的内容不会显示出来。如果为true,显示效果如下:

[图1]
图中,只能看到Panel的Header,但看不到Panel具体内容,只有点击右侧的折叠切换按钮才可以看到。
3. LinkBeforeHeader属性
    该属性为bool型,默认值为false。如果为false,右面的折叠按钮会显示在Header的右下方,效果如图2

[图2]
    如果为true,则像图1一样显示折叠按钮
4. HeaderText属性
    该属性为string型,用于设置Header标题的内容,例如图2中的HeaderText的值为Edit Post
5. LinkImageCollapsed属性
    该属性为string型,用于设置折叠按钮处于“折叠”状态的图片路径。
6. LinkImage属性
    该属性为string型,用于设置折叠按钮处于“展开”状态的图片路径。
7. BodyCssClass属性
    该属性为string型,用于设置内容显示区的样式。注意,由于内容显示区的实际上是一个div层,设置的样式要符合

的属性,不要出现不能设置的属性。.Text中的BodyCssClass="Edit",设置如下:
   

div.Edit   {
    color
: #333333;
    border-bottom
: 1px solid #AAAAAA;
    margin-bottom
: 8px;
    padding
: 4px 12px;
    background
: #f5f5f5;
}


当然你也可以设置一些其他属性如border-top[上边框], border-left [左边框], border-right[右边框]等。
8. DisplayHeader属性
    该属性为bool型,用于设置是否显示Header栏
9. HeaderCssClass属性
    该属性为string型,用于设置Header的样式。.Text中,HeaderCssClass="CollapsibleTitle",设置如下:

div.CollapsibleTitle  {
    font-size
: 105%;
    background
: #E5E5E5;
    border-top
: 1px solid #AAAAAA;
    border-bottom
: 1px dashed #AAAAAA;
    font-weight
: bold;
    color
: #333333;
    width
: auto;
    padding
: 2px 12px;
    margin
: 12px 0px 0px 0px;
    clear
: left;
}


其中我们可以看到border-top: solid,即上边框为实线,border-bottom: dashed,即下边框为虚线。

控件技术分析
1. Panel原理
    Panel本身其实就是一个div层,不管是VS自带的WebPanel还是Advanced Panel都是如此。
2. 折叠效果实现
    折叠按钮是一个关键,在最后生成的html代码中我们可以看到这样的代码:

< id ="Edit_Link"  onclick ="ToggleVisible('Edit_Contents','Edit_LinkImage','image/toggle_gray_up.gif','image/toggle_gray_down.gif'); return false;"  href ="#" >
< img  id ="Edit_LinkImage"  src ="image/toggle_gray_down.gif"  alt =""  border ="0"   />
a>


    超链接标签中onclick被重载,一旦按钮按下,调用ToggleVisible()函数。 让我们来看看ToggleVisible函数的实现:

function  ToggleVisible(targetID, imageID, linkImage, linkImageCollapsed)
{
    
if  (document.getElementById){
          target 
=  document.getElementById(targetID);
          
if  (target.style.display  ==   " none " ) {
              target.style.display 
=   "" ;
          } 
else  {
              target.style.display 
=   " none " ;
          }
          
          
if  (linkImageCollapsed  !=   "" ) {
              image 
=  document.getElementById(imageID);
              
if  (target.style.display  ==   " none " ) {
                  image.src 
=  linkImageCollapsed;
              } 
else  {
                  image.src 
=  linkImage;
              }
          }
      }
}


其中,参数targetID指定内容显示区的id,即div层的id,.Text中为Edit_Contents。参数imageID指定显示出来的折叠按钮的图片id。
该函数通过javascript中的getElementById获得特定html元素的指针,从而控制相应的html元素。至于显示和隐藏内容是通过修改html元素的style.display属性实现的,当style.display="none"时,则不显示,如果style.display="",则显示。

其实,在本控件中,ToggleVisible是动态装载的,该函数放在uicontrols.js文件中,通过重载Panel控件的OnPreRender事件可以完成javascript的动态加载,具体方法可以见《ASP.NET服务器控件与组件开发》。装载代码如下:

protected   override   void  OnPreRender(EventArgs e)
{    
    
if (Collapsible){
                Page.RegisterClientScriptBlock(CLIENT_SCRIPT_KEY, 
                    Utilities.GetClientScriptInclude(CLIENT_SCRIPT_FILE));
            }

    
base.OnPreRender(e);
}

其中,CLIENT_SCRIPT_KEY和CLIENT_SCRIPT_FILE为控件内部定义的常量。
3. Collapsed属性的实现
    Collapsed属性如果为true,则一开始就不显示内容区,该工作是通过重载Panel控件的Render方法实现的,代码如下:

if  (Collapsed)
{                    
        _contents.Style.Add(
"display""none");
    _image.ImageUrl 
= LinkImageCollapsed;
}

其中的_contents.Style.Add()为内容显示层增加了style.display="none",这样就可以在初始化时隐藏内容区。





http://www.niftyadmin.cn/n/3656220.html

相关文章

ffmpeg处理流程

ffmpeg——流程解析图解主流程1、初始化avformat2、初始化avformat网络3、初始化输入流1、申请AVFormatContext2、打开输入流3、探测输入流信息4、查找解码器&#xff08;视频和音频&#xff09;5、根据编码器初始化AVCodecContext4、初始化输出流1、申请AVFormatContext2、查找…

Microsoft Updater Application Block 1.3.3 BITSDownloader类设计 [翻译]

Microsoft Updater Application Block BITSDownloader类设计 译者&#xff1a;Tony Qu BITSDownloader类是一个从http服务器拷贝文件的下载器&#xff0c;它是Updater Application Block的默认下载器。 问题描述 BITSDownloader类被设计用于解决以下问题 1. 一个可以被应用程序…

linux后台执行(nohup)之大坑

问题场景 通过xshell远程登录服务器&#xff0c;然后启动几个后台服务&#xff0c;验证后服务功能都正常&#xff0c;ok! 然后过了一段时间发现服务器有问题&#xff0c;排查之后发现&#xff0c;有一个服务莫名的挂了&#xff0c;通过日志定位到接收到SIGHUP信号&#xff0c;…

Microsoft Updater Application Block 1.4.1 验证器设计 [翻译]

Microsoft Updater Application Block 验证器设计 译者&#xff1a;Tony Qu Updater Application Block提供了一个可扩展的验证器架构&#xff0c;这使通过签名或哈希号验证下载文件成为可能。验证器架构支持在服务器上生成签名和在客户端上确认这些签名。 图1 展示了服务器端的…

Microsoft Updater Application Block 1.3.1 下载器设计 [翻译]

Microsoft Updater Application Block 下载器设计 译者&#xff1a;Tony Qu Updater Application Block使用一个可扩展的下载器架构从指定的服务器上拷贝manifest文件和应用程序升级文件到客户端。 图1 展示了下载器架构 图1 包括下列过程 1. ApplicationUpdateManager类使用U…

av_buffersrc_add_frame返回-22

合并音频流时调用av_buffersrc_add_frame()返回-22&#xff0c;切换为av_buffersrc_add_frame_flags()&#xff0c;并指定AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT参数&#xff0c;正常通过。av_buffersrc_add_frame()根本问题参数问题&#xff0c;音频滤镜初始化参数配置错误&#…

Microsoft Updater Application Block 1.1 设计篇 [翻译]

Microsoft Updater Application Block 设计篇 译者&#xff1a;Tony Qu Updater Application Block为企业环境中解决桌面应用程序的更新问题提供了一个“无接触”解决方案。它包含一系列组件&#xff0c;每一个组件被设计用来实现更新过程中的一个特定的角色。 高级设计 图1展示…

ring buffer 环形队列 C++实现

RingBuff.h实现&#xff1a; #include <iostream>using namespace std;template <class T> class RingBuff { private:unsigned int m_size;int m_in;int m_out;T* m_data;public:RingBuff (unsigned int size): m_size(size), m_in(0), m_out(0){m_data new T[m…