控件開發基礎

博客园 首页 新随笔 联系 订阅 管理
在我看了Clingingboy的博客園之後,我嘗試者按照他所講的來試驗,有興趣的可以去參考他的 asp.net控件开 发基础(5) 我很感謝他為我們新人寫出了很好的教材.我在這裡也和大家分享一下我的心得.

我们根据属性的不同表现形式,把其区分为简单属性和复杂属性

1.簡單屬性:大家都很熟悉的如TextBox的Text屬性等
<asp:TextBox ID="TextBox1" Text="textbox控件" runat="server"></asp:TextBox>

2.複雜屬性:
(1)连字符的表现形式
<asp:TextBox ID="TextBox1" Text="textbox控件" runat="server" Font-Bold="True"></asp:TextBox>

(2)内镶属性的表现形式,如定义样式

<asp:DataList ID="DataList1" runat="server">
            
<SelectedItemStyle />
            
<EditItemStyle />
        
</asp:DataList>

(3)内镶集合属性的表现形式,如DropDownList (先不介绍,大家可看MSDN)
<asp:DropDownList ID="DropDownList1" runat="server">
            
<asp:ListItem>x</asp:ListItem>
            
<asp:ListItem>xx</asp:ListItem>
            
<asp:ListItem>xxx</asp:ListItem>
        
</asp:DropDownList>

下面我們重點來講講複雜屬性的設置過程
 1.定義複雜屬性類類型
 2.解決視圖不認識屬性為有效屬性的問題
    在控件屬性申明処添加一個元數據,指定屬性的可視度給設計階段序列化工具,程式碼產生器產生物件內
    容的程式碼,而非物件本身的程式碼   
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 3.解決属性面板并不支持这个复杂属性的問題使此複雜属性跟Font属性一样(可以折叠)显示在面板上 
    在此複雜屬性的定義出,添加一個元數據
    [TypeConverter(typeof(ExpandableObjectConverter))] 
 4.解决属性面板编辑复杂属性的子属性无效的问题
    为複雜屬性类的每个子属性加上一个元数据
    [NotifyParentProperty(true)]
 5.如果希望把此複雜属性做为内镶属性使用即如下代碼實現:
   
  <custom:custom id="Custom1" runat="server" name="Clingingboy" CustomMetier="教师" Age="21">
  
<CustomAddress City="杭州" Street="不告诉你" State="中国" Zip="310000" />
  
</custom:custom>
   我們需要如下處理:
   (1)在控件屬性申明処添加一個元數據,解決无法使用内镶属性問題
   [PersistenceMode(PersistenceMode.InnerProperty)]
   (2)在控件類前面添加一個元數據,讓控件支持内鑲屬性
   [ParseChildren(true)]
   (3)在控件類前面再添加一個元數據,解決在属性面板改变属性时,仍然无法使修改后的数据生效,且修改
       后,数据退回初始的数据,并且导致内镶属性消失
    [PersistChildren(false)]


posted on 2007-02-27 11:38  ada  阅读(1703)  评论(0编辑  收藏  举报