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

本文目的:

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

 

 

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

[c-sharp] view plain copy
  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);  
  33. }  

 

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

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

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

 

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

 

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

 

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

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

 

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

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

 

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

[c-sharp]  view plain copy
  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.   }  
  57. }  
 

 

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

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

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

    运行结果如下图所示。

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

 

===================================================================

原创不容易,转载请注明出处:http://hi.csdn.net/smallfools

相关链接:

  1. 在VS2008中创建自定义控件(一)创建网站项目和自定义控件项目
  2. 在VS2008中创建自定义控件(二)创建自定义控件并将其添加到工具箱中
  3. 在VS2008中创建自定义控件(三)在网页中添加自定义控件
  4. 在VS2008中创建自定义控件(四)为自定义控件添加默认值
  5. 在VS2008中创建自定义控件(五)修改tagprefix
  6. 在VS2008中创建自定义控件(六)创建完全自定义控件
  7. 在VS2008中创建自定义控件(七)自定义控件的中常用到的特性
  8. 在VS2008中创建自定义控件(八)输出HTML代码
  9. 在VS2008中创建自定义控件(九)添加属性
  10. 在VS2008中创建自定义控件(十)添加枚举型属性
  11. 在VS2008中创建自定义控件(十一)添加在属性窗口中可折叠的属性(一)
  12. 在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)
  13. 在VS2008中创建自定义控件(十三)添加内镶属性
  14. 在VS2008中创建自定义控件(十四)内镶属性与内联属性的优先级
  15. 在VS2008中创建自定义控件(十五)创建控件时出错(未能对属性XXX设置XXX)的解决方法

===================================================================

    本例源代码可以在http://download.csdn.net/source/3266002下载

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