Silverlight 学习——重写DatePicker (二)

一、问题与修改

            在上一篇文章中,出现了一个BUG,设置DatePicer控件输入只读,并非是真真的只读,仍可以进行删除,这与只读的概念相违背了,利用TextBox的IsReadOnly属性可以实现这一要求,不需要自己去定义只读!

二、新的需求

             在很多需求中,只需要选择年,或者是只需要选择月。在界面中,很多程序往往只使用ComboBox来实现这一需求。但是DatePicker完全能够实现,大家都知道DatePicer控件使用了一个隐藏的 Calendar控件!手动更改CalendarMode属性完全可以实现!因此,在DatePicker控件中,添加属性DateMode属性,继承自CalendarMode,通过改变DateMode属性来实现效果!

            同时,要用到扩展方法(在本例中方法名:public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)){})!它是一个静态类中的一个静态方法,通过此方法在DependencyObject类型中添加Descendents。在本例中的目的是为了找到Calendar控件!具体如何使用,请查找相关的资料了!吐舌头

二、代码

    public static class ControlsHelper
    {
        /// <summary>
        /// 扩展DependencyObject Descendents方法,递归找到制定的控件
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
        {
            int count = VisualTreeHelper.GetChildrenCount(root);
            for (int i = 0; i < count; i++)
            {
                var child = VisualTreeHelper.GetChild(root, i);
                yield return child;
                foreach (var descendent in Descendents(child))
                    yield return descendent;
            }
        }
    }

    public class DatePickerEx : DatePicker
    {

        #region 私有字段
        DatePickerTextBox CurrentTextBox;//DatePicker的文本框控件
        Popup CurrentPopup;//DatePicker控件的TempPart
        Calendar CurrentCalendar;//日历控件
   
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要在Android Studio中重写DatePicker并自定义样式,你需要执行以下步: 1. 创建一个新的自定义DatePicker类,继承自DatePicker或AppCompatDatePicker,这取决于你的项目中使用的主题。 ```java public class CustomDatePicker extends DatePicker { public CustomDatePicker(Context context) { super(context); init(); } public CustomDatePicker(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomDatePicker(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // 在这里进行自定义样式的设置 } } ``` 2. 在布局文件中使用你的自定义DatePicker代替原始的DatePicker。 ```xml <com.example.app.CustomDatePicker android:id="@+id/customDatePicker" android:layout_width="wrap_content" android:layout_height="wrap_content"/> ``` 3. 在你的自定义DatePicker类中,可以通过覆盖`onMeasure()`方法来设置DatePicker的大小。 ```java @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // 设置你想要的大小 int desiredWidth = MeasureSpec.getSize(widthMeasureSpec); int desiredHeight = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(desiredWidth, desiredHeight); } ``` 4. 如果你想要改变DatePicker的样式,可以通过覆盖`onDraw()`方法来绘制你自己的样式。 ```java @Override protected void onDraw(Canvas canvas) { // 在这里绘制你的自定义样式 super.onDraw(canvas); } ``` 这样,你就可以在Android Studio中重写DatePicker并自定义样式了。记得在自定义样式中添加你想要的日期选择器的外观和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值