我正在开发 WPF 应用程序,因为我试图禁用日历中的过去几天。有什么方法可以禁用过去的日子。请告诉我。
谢谢
您必须DisplayDateStart
使用今天的日期设置属性
<DatePicker Name="dt_StartDateFrom" DisplayDateStart="{x:Static sys:DateTime.Today}">
</DatePicker>
确保您已设置
xmlns:sys="clr-命名空间:系统;程序集=mscorlib"
在您的<UserControl>
标签中,以便能够使用该sys:
参数
PS 要禁用未来日期,您可以使用DisplayDateEnd
属性
您可以将DisplayDateStart属性设置为今天。
myCalendar.DisplayDateStart = DateTime.Today;
如果你想将它们涂黑,而不是隐藏所有以前的值,你可以这样做。
CalendarDateRange cdr = new CalendarDateRange(DateTime.MinValue, DateTime.Today);
myCalendar.BlackoutDates.Add(cdr);
我通过自己尝试得到了解决方案。
Window_load
只需将此行添加为calendar
.
Caldate.BlackoutDates.Add(new CalendarDateRange(new DateTime(1990, 1, 1),
DateTime.Now.AddDays(-1)));
它将阻止以前的日期。
您可以通过这种方式禁用日历中的过去几天:-
Caldr.DisplayDateStart = DateTime.Today;
要阻止过去的日期(今天之前的所有内容),您可以简单地使用框架的 4.0+ 方法:AddDatesInPast()
myCalendar.BlackoutDates.AddDatesInPast();
它与接受的答案相同,但更直接。
如果我们想通过 xaml 添加它,这是一个更简洁的解决方案。
在 WPF 中,您想使用 MVVM 绑定到您的视图模型。这种方法更通用,可以让您在单元测试中进行边界检查。
<DatePicker SelectedDate="{Binding SelectedDate}" DisplayDateStart="{Binding MinAvailDate}" DisplayDateEnd="{Binding MaxAvailDate}"></DatePicker>
在视图模型中......
private DateTime _minAvailDate= DateTime.UtcNow;
public DateTime MinAvailDate { get { return _minAvailDate; }
set { _minAvailDate = value; OnPropertyChanged("MinAvailDate"); }
设置 MinAvailDate = DateTime.Now,或为您的时区调整默认值。
以类似的方式实现 MaxAvailDate,以及绑定到 SelectedDate。
我喜欢@sohailby 的答案,但我只想通过使用停电日期来改变一点
<DatePicker.BlackoutDates>
<CalendarDateRange End="{x:Static sys:DateTime.Today}" Start="{x:Static sys:DateTime.MinValue}" />
</DatePicker.BlackoutDates>