Silverlight中DataPager控件扩展

大家一定遇到这样的情况,想改变一下SL的DataPager的显示信息,比如希望分页控件上显示数据的总数。那么就需要扩展一下DataPager控件即可。

  其实扩展DataPager很简单,只要获取到DataPager控件上的元素,然后再改变元素上数据。比如DataPager控件上显示“总页数”的元素是一个TextBlock,那么可以通过方法GetTemplateChild获取到,参数是元素的名称。然后通过重写方法OnApplyTemplate即可,下面请看代码

代码

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> /// <summary>
    /// 扩展DataPager类,一是要显示总数据数有多少,二是修改TextBox的宽度
    /// </summary>
    public class ExtendDataPager : DataPager
    {
        //定义变量
        TextBlock tbCurrentPagePrefix;
        TextBlock tbCurrentPageSuffix;
        Button btnNextPageButton;
        Button btnFirstPageButton;
        Button btnLastPageButton;
        Button btnPreviousPageButton;
        TextBox txtCurrentPageTextBox;

        int _dataCount = 0;

        /// <summary>
        /// 取得数据总数
        /// </summary>
        public int DataCount
        {
            get { return _dataCount; }
            set { _dataCount = value; }
        }

        double _CurrentPageTextBoxWidth = 55;

        /// <summary>
        /// 显示当前页的TextBox的宽度,默认宽度为55
        /// </summary>
        public double CurrentPageTextBoxWidth
        {
            get { return _CurrentPageTextBoxWidth; }
            set { _CurrentPageTextBoxWidth = value; }
        }

        public ExtendDataPager():base()
        {

        }

        /// <summary>
        /// 重写  当应用新模板时生成 System.Windows.Controls.DataPager 控件的可视化树。
        /// </summary>
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            //通过名称取得模板中的元素
            tbCurrentPagePrefix = GetTemplateChild("CurrentPagePrefixTextBlock") as TextBlock;
            tbCurrentPageSuffix = GetTemplateChild("CurrentPageSuffixTextBlock") as TextBlock;
            btnNextPageButton = GetTemplateChild("NextPageButton") as Button;
            btnFirstPageButton = GetTemplateChild("FirstPageButton") as Button;
            btnLastPageButton = GetTemplateChild("LastPageButton") as Button;
            btnPreviousPageButton = GetTemplateChild("PreviousPageButton") as Button;
            txtCurrentPageTextBox = GetTemplateChild("CurrentPageTextBox") as TextBox;

            //重写以下元素的事件
            btnNextPageButton.Click += new RoutedEventHandler(
                (o, e) =>
                {
                    ExtendItem();
                }
                );
            btnFirstPageButton.Click += new RoutedEventHandler(
                (o, e) =>
                {
                    ExtendItem();
                }
                );
            btnLastPageButton.Click += new RoutedEventHandler(
                (o, e) =>
                {
                    ExtendItem();
                }
                );
            btnPreviousPageButton.Click += new RoutedEventHandler(
                (o, e) =>
                {
                    ExtendItem();
                }
                );
            txtCurrentPageTextBox.KeyDown += new KeyEventHandler(
                (o, e) =>
                {
                    ExtendItem();
                }
            );
            ExtendItem();
        }

        /// <summary>
        /// 扩展项
        /// </summary>
        private void ExtendItem()
        {
            //重写以下元素显示的内容以及显示当前页的TextBox的宽度
            tbCurrentPagePrefix.Text = "第";
            tbCurrentPageSuffix.Text = "页  共" + this.PageCount.ToString() + "页  共"+DataCount.ToString()+"条数据";
            txtCurrentPageTextBox.Width = CurrentPageTextBoxWidth;
        }
    }

有人可能不知道怎么知道控件DataPager上元素的名称,比如"CurrentPagePrefixTextBlock",其实很简单,你只要查询DataPager元数据即可。

通过上面的代码,就已经扩展了SL的控件DataPager,然后就可以像使用普通的DataPager一样使用,但是如果想要显示数据总数,必须向属性DataCount赋值。

希望以上对大家有帮助。

本文转自:http://www.cnblogs.com/888h/archive/2010/10/26/1861782.html

Silverlight中DataPager控件扩展

时间: 2024-12-18 06:09:23

Silverlight中DataPager控件扩展的相关文章

Silverlight中Image控件Stretch属性的四种值比较

通过设置Image控件Stretch属性的值可以控制图片的显示形式: 包含的值:None.Fill.Uniform.UniformToFill 1 <Grid x:Name="LayoutRoot" Background="White" Height="489" Width="603"> 2 <Image Height="150" HorizontalAlignment="Lef

Silverlight中获取控件中子控件

如题:,直接来看代码: /// <summary> /// 查找并返回第一个 相同 name的子元素 /// </summary> /// <typeparam name="T">需要查找 的子控件 类型</typeparam> /// <param name="obj">需要查找其下面子控件的 控件 类型</param> /// <param name="childName&q

Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示

定义依赖属性作为datagrid的数据源 protected static readonly DependencyProperty ViewLogsProperty = DependencyProperty.Register("ViewLogs", typeof(ObservableCollection<RMSReportEvent>), typeof(LogViewer), new PropertyMetadata(null)); protected Observable

WPF中查找控件的扩展类

在wpf中查找控件要用到VisualTreeHelper类,但这个类并没有按照名字查找控件的方法,于是搜索网络,整理出下面这个类,感觉用起来很是方便. 贴出来,供大家参考. /// <summary> /// WPF/Silverlight 查找控件扩展方法 /// </summary> public static class VisualHelperTreeExtension { /// <summary> /// 根据控件名称,查找父控件 /// elementNa

给easyui datebox时间框控件扩展一个清空的实例

给easyui datebox扩展一个清空的实例 步骤一:拓展插件 /** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; (function ($) { var buttons = $.extend([], $.fn.datebox.defaults.buttons); buttons.splice(1, 0, { text: function (target) { return $(target).datebox("o

asp.net,关于Listview+DataPager控件使用

关于Listview+DataPager控件使用1.DAL层,根据开始条数+结束条数查询数据.2.BLL层,startRowIndex和maximumRows进行查询.(startRowIndex + 1, maximumRows + startRowIndex + 1);3.使用ObjectDataSource控件,配置数据源,   startRowIndex和maximumRows必须BLL逻辑层定义的方法参数名一致,   SelectCountMethod中添加查询总记录条数方法名.4.使

轻松学习Asp.net中的控件

C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销.目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件:因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统.

ArcGIS Engine开发之旅03--ArcGIS Engine中的控件

原文 ArcGIS Engine开发之旅03--ArcGIS Engine中的控件 制图控件,如MapControl.PageLayoutControl,其中MapControl控件主要用于地理数据的显示和分析,PageLayoutControl用于生成一幅成品地图.MapControl封装了Map对象,而PageLayoutControl则封装了PageLayout对象.这两个控件都实现了IMxContents接口,因此不仅可以读取ArcMap创建的地图文档,而且可以将自身的地图内容写到一个新

Delphi中WebBrowser控件打开部分网站报&quot;Invalid floating point operation”解决

Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决 EmbeddedWBWebBrowserDelphi 最近用EmbeddedWB控件做浏览器相关应用的时候,发现有些网页只要一打开就一定会蹦出一个“Invalid floating point operation”异常(关掉异常对话框以后,浏览器无响应),而程序仅仅是一句 WebBrowser1.Navigate(Edit1.Text);貌似很多含有Silverlight