分享

自定义控件集合属性的设计时支持

 googo 2011-07-19

    集 合属性是自己定义控件的一个重要属性,很多时候都是要用到的现在就说说应该怎样正确配置集合属性。接下来就用一个图片显示控件来说明集合属性的正确应用。 控件实现图片切换和横向无缝滚动功能。既然要说自定义控件的集合属性首先就要熟悉一下要用到的几个元数据(Attribute)。

控件级别:
    1. [ParseChildren(true)]EditorAttribute 使 UI 类型编辑器与类型或类型成员关联。
    2. [PersistChildren(false)]

属性级别:
    3. DesignerSerializationVisibilityAttribute 和相应的 DesignerSerializationVisibility 枚举值,您可以指定:是要序列化属性的值,还是要序列化集合属性的值。Visual Studio 中对此任务提供了广泛的支持。这个很重要哦 呵呵
    4. PersistenceMode(PersistenceMode.InnerProperty)NotifyParentPropertyAttribute 应用于应该引发通知的嵌套属性,您可以指定当嵌套属性的值改变时,是否应该通知具有嵌套属性或子级属性的属性
    5. EditorAttribute 使 UI 类型编辑器与类型或类型成员关联。

属性类级别:
    6. NotifyParentPropertyAttribute 应用于应该引发通知的嵌套属性,您可以指定当嵌套属性的值改变时,是否应该通知具有嵌套属性或子级属性的属性
    7. [TypeConverter(typeof(ExpandableObjectConverter))]

    接下来就来看一下具体的代码:

控件、属性级别:

    [DefaultProperty("ShowMode")]
    [ParseChildren(
true
)]
    [PersistChildren(
false
)]
    [ToolboxData(
"<{0}:PicSwitch runat=server></{0}:PicSwitch>"
)]
    
public class
 PicSwitch : WebControl
    
{
        
private List<ImageItem>
 _imageItems;
        
//集合属性

        [
        Category(
"Behavior"
),
        Description(
"集合属性"
),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        Editor(
typeof(ImageItemEditor), typeof
(UITypeEditor)),
        PersistenceMode(PersistenceMode.InnerProperty),
        ]
        
public List<ImageItem>
 ImageItems
        
{
            
get

            
{
                
if (_imageItems == null
)
                    _imageItems 
= new List<ImageItem>
();
                
return
 _imageItems;
            }

        }

     }

属性类级别:

    [TypeConverter(typeof(ExpandableObjectConverter))]
    
public class
 ImageItem
    
{
        
public
 ImageItem()
            : 
this(String.Empty, String.Empty, string
.Empty)
        
{
        }


        
public ImageItem(string title, string linkUrl, string imageUrl)
        
{
            _title 
=
 title;
            _linkUrl 
=
 linkUrl;
            _imageUrl 
=
 imageUrl;
        }



        
private string _title;
        
private string
 _linkUrl;
        
private string
 _imageUrl;

        [NotifyParentProperty(
true
)]
        
public string
 Title
        
{
            
get return _title; }

            
set { _title = value; }
        }


        [NotifyParentProperty(
true)]
        [EditorAttribute(
typeof(ImageUrlEditor), typeof
(UITypeEditor))]
        
public string
 ImageUrl
        
{
            
get return _imageUrl; }

            
set { _imageUrl = value; }
        }


        [NotifyParentProperty(
true)]
        [EditorAttribute(
typeof(UrlEditor), typeof
(UITypeEditor))]
        
public string
 LinkUrl
        
{
            
get return _linkUrl; }

            
set { _linkUrl = value; }
        }

    }

    点击这里下载完整控件代码
    下载完成后运行源代码生成dll文件,打开工具箱右键单击选择项,浏览生成的dll文件把控件添加到工具箱就可以像使用微软自带的控件一样来使用这个控件。
    使用说明:首先选择ShowMode指定显示模式 ,Switch:图片像幻灯片一样切换 HorizontalRoll:图片向右滚动。
ImageItems是要显示的图片集合也就是我们的集合属性。配置好这两个属性就可以显示图片了。
    到这里一个图片显示控件就搞定了,简单吧 呵呵
附后台.CS赋值的代码

        List<ClassLibrary.Controls.ImageItem> items = new List<ClassLibrary.Controls.ImageItem>();
        
for (int i = 0; i < 10; i++
)
        
{
            ClassLibrary.Controls.ImageItem item 
= new
 ClassLibrary.Controls.ImageItem();
            item.Title 
= "自定义控件" +
 i.ToString();
            item.LinkUrl 
= "http://cn.yahoo.com"
;
            item.ImageUrl 
= "Media/Pic.jpg"
;
            PicSwitch1.ImageItems.Add(item); ;
        }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多