time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > .net > Visual Studio > 在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)

时间:2010-12-01 23:56 点击:3719次 字体:[ ]




本文目的:

让属性窗口中的修改同步到aspx源代码视图


    在添加了可折叠的属性之后,我们可以重写RenderContents()方法,以便输出唐诗的作者信息,如以下代码所示。

 

  1. /// <summary>  
  2. /// 呈现控件  
  3. /// </summary>  
  4. /// <param name="output"></param>  
  5. protected override void RenderContents(HtmlTextWriter output)  
  6. {  
  7.     string OutText = "";  
  8.     //诗名  
  9.     if (!String.IsNullOrEmpty(Title))  
  10.     {  
  11.         OutText += "<p style="\" mce_style="\""text-align:center; font-size:12pt; font-weight:bold;\">" + Title + "(" + PoetryType + ")</p>";  
  12.     }  
  13.     //作者  
  14.     if (!String.IsNullOrEmpty(PoetryAuthor.Name))  
  15.     {  
  16.         //姓名  
  17.         OutText += "<p style="\" mce_style="\""text-align:center; font-size:9pt; font-weight:bold;\">作者:" + PoetryAuthor.Name +" ";  
  18.         //字  
  19.         if (!String.IsNullOrEmpty(PoetryAuthor.CourtesyName))  
  20.         {  
  21.             OutText += "字:" + PoetryAuthor.CourtesyName + " ";  
  22.         }  
  23.         //号  
  24.         if (!String.IsNullOrEmpty(PoetryAuthor.SelfTitled))  
  25.         {  
  26.             OutText += "号:" + PoetryAuthor.SelfTitled + " ";  
  27.         }  
  28.         OutText += "</p>";  
  29.     }  
  30.     //内容  
  31.     OutText += "<p style="\" mce_style="\""text-align:center; font-size:10pt;\">" + Text + "</p>";  
  32.     output.Write(OutText);  

    下面,我们在自定义控件里添加上作者属性值。

    可是,在添加作者属性值时,发现了一个问题,当我们在属性窗口里添加了属性值之后,在aspx文件的源代码窗口中并没有同时添加作者属性的内容,如下图所示。

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)_www.fengfly.com

 

    由于aspx中的源代码没有同步添加作者属性值,所以,在生成后的网页中,也看不到作者信息,如下图所示。

 

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)_www.fengfly.com

 

    当然,我们也可以直接在aspx源代码中添加作者属性值,如下图所示。

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)_www.fengfly.com

 

    从上图可以发现,在aspx源代码中添加的作者属性值,属性窗口中可以同步显示。如果生成后浏览该网页,可以看到作者信息,如下图所示。

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)_www.fengfly.com

 

    要解决这个问题,则必须要为作者类中的每个属性都添加一个[NotifyParentProperty(true)]特性,如以下代码所示。

  1. /// <summary>  
  2. /// 作者类  
  3. /// </summary>  
  4. public class Author  
  5. {  
  6.   //姓名  
  7.   private string _name = null;  
  8.   //字  
  9.   private string _courtesyName = null;  
  10.   //号  
  11.   private string _selfTitled = null;  
  12.   /// <summary>  
  13.   /// 姓名  
  14.   /// </summary>  
  15.   [NotifyParentProperty(true)]  
  16.   public string Name  
  17.   {  
  18.       get 
  19.       {  
  20.           return _name;  
  21.       }  
  22.       set 
  23.       {  
  24.           _name = value;  
  25.       }  
  26.   }  
  27.   /// <summary>  
  28.   /// 字  
  29.   /// </summary>  
  30.   [NotifyParentProperty(true)]  
  31.   public string CourtesyName  
  32.   {  
  33.       get 
  34.       {  
  35.           return _courtesyName;  
  36.       }  
  37.       set 
  38.       {  
  39.           _courtesyName = value;  
  40.       }  
  41.   }  
  42.   /// <summary>  
  43.   /// 号  
  44.   /// </summary>  
  45.   [NotifyParentProperty(true)]  
  46.   public string SelfTitled  
  47.   {  
  48.       get 
  49.       {  
  50.           return _selfTitled;  
  51.       }  
  52.       set 
  53.       {  
  54.           _selfTitled = value;  
  55.       }  
  56.   }  

 

 

    NotifyParentProperty特性的作用是说明是否将属性窗口中对子属性的修改上传到对象模型,并在被修改了的子属性的控件中产生修改通知。现在明白为什么属性作者属性的子属性时为什么在aspx源代码中没有同步修改了吧,这是因为没有设置NotifyParentProperty特性,VS都不知道你在属性窗口中对子属性进行修改。

    重新生成之后,再对属性窗口中的值进行修改,如下图所示,aspx源代码窗口中的内容也进行了修改。

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)_www.fengfly.com

    运行结果如下图所示。

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)_www.fengfly.com

本文源码下载



本文地址 : http://www.fengfly.com/plus/view-192995-1.html
标签: VS2008
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: