DatePicker 修改默认值 select a date

 

首先这个问题困扰了我还一阵子,DatePicker控件在有的系统中默认情况下,如果没有显示日期,那么将会显示文本“选择日期”作为显示内容。在有的系统中显示的是英文"select a date"。

 

 

 

      对于这个问题,程序要求必须一致,于是我用了各种方式,开始修改。以下是修改后的最终版,对于有需要的同行,你们完全可以直接使用了。
      你可以定义默认显示的任何内容。

      具体修改方法:

        首先,在您的应用程序APP中的OnStartup方法,你要注册一个全局事件处理程序来控制DatePicker控件的Loaded事件  

 

 

    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            try
            {
                base.OnStartup(e);
                EventManager.RegisterClassHandler(typeof(DatePicker),
                    DatePicker.LoadedEvent,
                    new RoutedEventHandler(DatePicker_Loaded));
            }
            catch (Exception ex)
            {
                SystemLog.WriteRunLog(ex);
            }
        }

    } 

 

        public static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
        {
            if (depObj == nullreturn null;

            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                var child = VisualTreeHelper.GetChild(depObj, i);

                var result = (child as T) ?? GetChildOfType<T>(child);
                if (result != nullreturn result;
            }
            return null;

        } 

  

        void DatePicker_Loaded(object sender, RoutedEventArgs e)
        {
            var dp = sender as DatePicker;
            if (dp == nullreturn;

            var tb = GetChildOfType<DatePickerTextBox>(dp);
            if (tb == nullreturn;

            var wm = tb.Template.FindName("PART_Watermark", tb) as ContentControl;
            if (wm == nullreturn;

            wm.Content = "请选择日期";

        } 

 

以上方法可以项目里所有DatePicker的默认显示问题。 

 

最终效果 

 


 

posted @ 2012-06-15 20:15  Popeye-lxw  阅读(2086)  评论(1)    收藏  举报