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

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

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值