怎么设置WPF的DatePicker默认显示“请选择一个日期”

2025-03-20 13:30:18
推荐回答(3个)
回答1:

可以,方法有2种,一种是用代码,一种是重写样式,我来演示一下用代码怎么实现

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 //首先在你的App类,即创建项目的时候App.xaml下的类 public partial class App : Application { //在启动方法中为时间控件注册一个加载事件 void app_Startup(object sender,StartupEventArgs e) { EventManager.RegisterClassHandler(typeof(DatePicker), FrameworkElement.LoadedEvent, new RoutedEventHandler(DatePicker_Loaded)); } void DatePicker_Loaded(object sender, RoutedEventArgs e) { var dp = sender as DatePicker; if (dp == null) return; var wm = RecursionFindControl(dp, "PART_Watermark"); if (wm == null) return; //重新默认水印值 wm.Content = "请选择一个日期"; } ///

/// 递归寻找指定名称和指定类型的控件(辅助方法) /// /// 寻找的类型 /// 对象 /// 需要寻找的控件名称 /// 最大递归级数 /// 当前已经递归的级数 /// 返回寻找的类型 public static T RecursionFindControl(DependencyObject reference, string controlName = "", int maxLevel = int.MaxValue, int currentLevel = 1) where T : class { DependencyObject obj = null; if (reference == null) { return obj as T; } for (int i = 0; i < VisualTreeHelper.GetChildrenCount(reference); i++) { obj = VisualTreeHelper.GetChild(reference, i); FrameworkElement elemnt = obj as FrameworkElement; if (elemnt == null) { break; } if (elemnt is T && ((!string.IsNullOrEmpty(controlName) && elemnt.Name == controlName) || string.IsNullOrEmpty(controlName))) { return obj as T; } else { if (currentLevel < maxLevel)//递归层级限制 { obj = RecursionFindControl(obj, controlName, maxLevel, currentLevel + 1) as DependencyObject; if (obj != null) { return obj as T; } } } } return obj as T; } }

回答2:

其实方法很简单
在代码里设置datepicker控件: mydatepicker.SelectedDate=null; 即可
可以写到这个控件的Loaded事件处理中:
((DatePicker)sender).SelectedDate = null;
个人觉得这是比较优雅的处理方法。

回答3:

可以 ,方法有2种,一种是用代码,一种是重写样式,我来演示一下用代码怎么实现 //首先在你的App类,即创建项目的时候App.xaml下的类