Silverlight 自定义控件 模板化控件 (一)属性

Silverlight 自定义控件 模板化控件 (一)属性,第1张

概述以前写ASP.NET winfrom 总想自己写自定义控件,一直也没机会写。心里挺痒痒的,最近用silverlight做项目。也没怎么用过silverlight硬着头皮看资料。看官方的开源扩展包。国内也没有比较好,比较全的这个资料吧。既然自己学会了就和大家分享下吧。             以 DataPager控件为示列 ,由简入繁,此篇里面主要是继承原有模板化控件。主要讲述。既有控件如何公开一

以前写ASP.NET winfrom 总想自己写自定义控件,一直也没机会写。心里挺痒痒的,最近用silverlight做项目。也没怎么用过silverlight硬着头皮看资料。看官方的开源扩展包。国内也没有比较好,比较全的这个资料吧。既然自己学会了就和大家分享下吧。

     

      以 DataPager控件为示列 ,由简入繁,此篇里面主要是继承原有模板化控件。主要讲述。既有控件如何公开一个新属性。后续会介绍更详细的。

    

     为原有DataPager控件隐藏原有的PageCount属性,公开新的PageCount的属性。

      原有的PageCount属性只具有只读属性,现在新的PageCount属性具有读和写的属性。

 

      新建Silverlight项目SLToolkit的类库项目,

      并新建DataPager类, 并继承微软的DataPager类    

 

在Tools项目中新建文件夹Tools

然后建立DataPager类该类继承与System.windows.Controls.DataPager。需引用System.windows.Controls.Data

如图:

     添加如下引用

     System.windows.Data  
  System.windows.Controls.Data

如没有请安装Microsoft Silverlight 4 Toolkit

 

我们这里只对System.windows.Controls.DataPager内部进行改造,用过DataPager的人都应该知道PageCount属性只具有只读。这点让咱们以前用惯非微软分页控件的人感觉很不舒服(以前ASP.NET中我都用的吴起娃的分页控件)。PageCount要是能自己指定多好啊。那么咱们下面来改造它吧!

       

using System;

using System.Net;

using System.windows;

using System.windows.Controls;

using System.windows.documents;

using System.windows.Ink;

using System.windows.input;

using System.windows.Media;

using System.windows.Media.Animation;

using System.windows.Shapes;

using System.Collections.Generic;

using System.windows.Data;

 

namespace SLToolkit

{

    public class DataPager : System.windows.Controls.DataPager

    {

        #region 定义总条数

        /// <summary>

        /// 定义总条数

        /// </summary>

        public new int PageCount

        {

            get { return (int)this.GetValue(PageCountProperty); }

            set

            {

                this.SetValue(PageCountProperty,value);

                            }

        }

        public static new DependencyProperty PageCountProperty = DependencyProperty.Register("PagerPageCount",typeof(int),typeof(DataPager),new PropertyMetadata(0,PageCountPropertyChangedCallback));

        private static voID PageCountPropertyChangedCallback(DependencyObject obj,DependencyPropertyChangedEventArgs arg)

        {

            DataPager dataPager = obj as DataPager;

            dataPager.Bind();

        }

        #endregion

 

        /// <summary>

        /// 指定页数后重新绑定总页数

        /// </summary>

        public voID Bind()

        {

            int totalpagers = PageCount;

            List<int> itemCount = new List<int>();//用于DataPager的数据提供

 

            for (int i = 1; i <= totalpagers; i++)

            {

                itemCount.Add(i);

            }

            PagedCollectionVIEw pagedCollectionVIEw = new PagedCollectionVIEw(itemCount);

            pagedCollectionVIEw.PageSize = PageSize;

            this.source = pagedCollectionVIEw;

 

 

 

注意要点:

  public new int PageCount这个写法是隐藏System.windows.Controls.DataPagerr的 PageCount属性。

 

 

依赖项

定义一个依赖项PageCountProperty 还需要为其注册。

public static DependencyProperty PageCountProperty = DependencyProperty.Register("PagerPageCount",PageCountPropertyChangedCallback));

后面DependencyProperty.Register的参数一次为注册名称,注册类型,像哪个类注册(控件就是一个类),

PropertyMetadata能设置默认值和回调函数。

这里我们应用的特定类型是一个回调函数,当PageCount发生改变时会执行该回调函数。回调函数执行指定页数后重新绑定总页数。

 

以上代码完成扩展封装System.windows.Controls.DataPager控件。

 

 

那么封装完毕后我们如何应用新封装的这个控件呢?

我们来看一下XMAL文件。

<UserControl x:Class="SLAPPTest.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/Expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:MyCtrl="SLTOol"

    mc:Ignorable="d"

    xmlns:SLToolkit="clr-namespace:SLToolkit;assembly=SLToolkit"

    d:DesignHeight="300" d:DesignWIDth="400">

 

    <GrID x:name="LayoutRoot" Background="White">

        <StackPanel >

            <SLToolkit:DataPager  PageSize="10" PageCount="1000" borderBrush="#e8e8e8" WIDth="950" displayMode="FirstLastPrevIoUsNextNumeric"  NumericbuttonCount="10"></SLToolkit:DataPager>

            <SLToolkit:DataPager  PageSize="10" PageCount="5000" borderBrush="#e8e8e8" WIDth="950" displayMode="Numeric"  NumericbuttonCount="20"></SLToolkit:DataPager>

        </StackPanel>

    </GrID>

</UserControl>

 

   xmlns:SLToolkit="clr-namespace:SLToolkit;assembly=SLToolkit"

这个是为刚才写的控件导入CLR命名空间的。


是不是很简单。一个改造后的DataPager  就出来了。改造后的DataPager  具有直接给定总条数进行自动分页的功能了。

源码下载 http://download.csdn.net/source/3332251 

总结

以上是内存溢出为你收集整理的Silverlight 自定义控件 模板化控件 (一)属性全部内容,希望文章能够帮你解决Silverlight 自定义控件 模板化控件 (一)属性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存