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)