Silverlight 学习——重写DatePicker

Silverlight 学习——重写DatePicker,第1张

概述一、问题与目的:              学习Silverlight已经有一段时间了。一直没时间写一篇学习笔记(如有错误,望同仁们指出,其实也很简单,就当做个笔记了)。              关于Silverlight的DatePicker控件,原来的DatePicker控件,不可控制是否能手动输入。如果允许用户手动输入,则会出现错误输入日期格式的情况,但是,DatePicker未提供一个属 一、问题与目的:

             学习Silverlight已经有一段时间了。一直没时间写一篇学习笔记(如有错误,望同仁们指出,其实也很简单,就当做个笔记了)。

             关于Silverlight的DatePicker控件,原来的DatePicker控件,不可控制是否能手动输入。如果允许用户手动输入,则会出现错误输入日期格式的情况,但是,DatePicker未提供一个属性来获取DatePicker错误输入的内容,不能做到正确提示,也不可代码清空文本内容,当然,错误输入可引发DateValIDationError事件,但是只有事件CalendarClosed和CalendarOpened引发此事件验证,很不方便。因此重写了DatePicker!

二、解决办法

              在控件中添加IsReadonly属性,控制是否手动输入,再添加inputText属性,获取错误输入的文本内容。可同步控件本身的Text属性。这样,既可以控制用户手动输入,也可以获取用户错误输入内容,方便代码人员提示!

三、代码

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.windows.Controls.Data;

 public class DatePickerEx : DatePicker
    {
        #region 私有字段
        TextBox CurrentTextBox;
        public static Readonly DependencyProperty IsReadonlyProperty = DependencyProperty.Register("IsReadonly",typeof(bool),typeof(DatePickerEx),new PropertyMetadata(false));
        public static Readonly DependencyProperty inputTextProperty = DependencyProperty.Register("inputText",typeof(String),new PropertyMetadata("",inputTextChanged));

        #endregion

        #region 属性
        /// <summary>
        /// 得到手动输入的值
        /// </summary>
        public string inputText
        {
            get { return (string)GetValue(inputTextProperty); }
            set { SetValue(inputTextProperty,value); }
        }

        /// <summary>
        /// 启用和关闭手动输入
        /// </summary>
        public bool IsReadonly
        {
            get { return (bool)GetValue(IsReadonlyProperty); }
            set { SetValue(IsReadonlyProperty,value); }
        }
        #endregion

        #region 重写方法及事件
        public overrIDe voID OnApplyTemplate()
        {
            base.OnApplyTemplate();
            this.CurrentTextBox = GetTemplateChild("TextBox") as TextBox;
            this.CalendarClosed += new RoutedEventHandler(DatePickerEx_CalendarClosed);
        }

        protected overrIDe voID OnKeyUp(KeyEventArgs e)
        {
            base.OnKeyUp(e);
            if (!this.IsReadonly)
                this.inputText = this.CurrentTextBox.Text;
        }
        protected overrIDe voID OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (this.IsReadonly)
                e.Handled = this.IsReadonly;
        }

        #endregion

        #region 自定义事件
        public virtual voID DatePickerEx_CalendarClosed(object sender,RoutedEventArgs e)
        {
            this.inputText = this.Text;
        }
        protected static voID inputTextChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
        {
            DatePickerEx sender = d as DatePickerEx;
            sender.CurrentTextBox.Text = e.NewValue.ToString();

        }
        #endregion
    }

 

使用方式在XAML页 添加(xmlns:ControlsEx="clr-namespace:FXD.Commonlib.Controls;assembly=FXD.Commonlib") 引用,当然,此组件引用根据实际情况而改变; 使用控件时; <controlsEx:DatePickerEx IsReadonly="True" Height="23" margin="5,0" inputText="{Binding SearchDate,Mode=TwoWay}" WIDth="120" />

总结

以上是内存溢出为你收集整理的Silverlight 学习——重写DatePicker全部内容,希望文章能够帮你解决Silverlight 学习——重写DatePicker所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存