以前写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 自定义控件 模板化控件 (一)属性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)