8

我正在开发 WPF 应用程序,因为我试图禁用日历中的过去几天。有什么方法可以禁用过去的日子。请告诉我。

谢谢

4

8 回答 8

16

您必须DisplayDateStart使用今天的日期设置属性

<DatePicker Name="dt_StartDateFrom" DisplayDateStart="{x:Static sys:DateTime.Today}">
</DatePicker>

确保您已设置

xmlns:sys="clr-命名空间:系统;程序集=mscorlib"

在您的<UserControl>标签中,以便能够使用该sys:参数

PS 要禁用未来日期,您可以使用DisplayDateEnd属性

于 2017-08-20T10:05:34.020 回答
11

您可以将DisplayDateStart属性设置为今天。

myCalendar.DisplayDateStart = DateTime.Today;

如果你想将它们涂黑,而不是隐藏所有以前的值,你可以这样做。

CalendarDateRange cdr = new CalendarDateRange(DateTime.MinValue, DateTime.Today);
myCalendar.BlackoutDates.Add(cdr);
于 2013-07-01T09:54:06.907 回答
3

我通过自己尝试得到了解决方案。

Window_load只需将此行添加为calendar.

Caldate.BlackoutDates.Add(new CalendarDateRange(new DateTime(1990, 1, 1), 
DateTime.Now.AddDays(-1)));

它将阻止以前的日期。

于 2013-07-01T10:17:34.760 回答
3

您可以通过这种方式禁用日历中的过去几天:-

Caldr.DisplayDateStart = DateTime.Today;

于 2013-07-01T11:43:03.383 回答
2

要阻止过去的日期(今天之前的所有内容),您可以简单地使用框架的 4.0+ 方法:AddDatesInPast()

myCalendar.BlackoutDates.AddDatesInPast();

它与接受的答案相同,但更直接。

于 2015-02-10T14:44:41.990 回答
1

如果我们想通过 xaml 添加它,这是一个更简洁的解决方案。

于 2017-05-18T01:09:13.177 回答
0

在 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。

于 2017-12-04T15:30:22.423 回答
0

我喜欢@sohailby 的答案,但我只想通过使用停电日期来改变一点


  <DatePicker.BlackoutDates>
     <CalendarDateRange End="{x:Static sys:DateTime.Today}" Start="{x:Static sys:DateTime.MinValue}" />
  </DatePicker.BlackoutDates>
于 2019-07-19T13:44:18.727 回答