【问题标题】:how to disable past days in calender in WPF?如何在 WPF 中禁用日历中的过去几天?
【发布时间】:2013-07-01 09:47:07
【问题描述】:

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

谢谢

【问题讨论】:

  • 问题必须表明对正在解决的问题的基本了解。告诉我们您尝试过什么,为什么它不起作用,以及它应该如何起作用。另见:Stack Overflow question checklist
  • 可以使用 DatePicker 的 DisplayDateStart 和 DisplayDateEnd 属性
  • 我不确定是否禁用,但您可以根据所选日期验证日期选择器。在此处查看此链接; stackoverflow.com/questions/2610883/date-picker-validation-wpf希望对您有所帮助
  • 嗨 Danny Beckett:在日历中,我们可以通过这样的方式提及从日期到日期来阻止日期: 我没有开始日期,只有昨天的结束日期,我需要阻止过去的日期。
  • 喜欢在日历中而不是在日期选择器中。

标签: wpf


【解决方案1】:

您必须将DisplayDateStart 属性设置为今天的日期

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

确保您已设置

xmlns:sys="clr-namespace:System;assembly=mscorlib"

在您的&lt;UserControl&gt; 标记中能够使用sys: 参数

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

【讨论】:

    【解决方案2】:

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

    myCalendar.DisplayDateStart = DateTime.Today;
    

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

    CalendarDateRange cdr = new CalendarDateRange(DateTime.MinValue, DateTime.Today);
    myCalendar.BlackoutDates.Add(cdr);
    

    【讨论】:

    • 你是对的,但我喜欢在不消失的情况下将日期显示为交叉。
    • 如何设置固定日期而不是今天的日期??
    • @Kartiikeya - 请参阅DisplayDateStart 链接中的示例。你可以创建一个新的DateTime 对象并传入你想要的日期。
    • 如何在 datepicker UI 中禁用日视图?
    【解决方案3】:

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

    Window_load 中只需为calendar 添加这一行。

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

    它将阻止以前的日期。

    【讨论】:

    • 这意味着用户也可以选择 1990 年之前的任何日期。
    • 然后你可以将它设置为某个完全遥不可及的日期: DatePickerName.BlackoutDates.Add(new CalendarDateRange(new DateTime(1, 1, 1), DateTime.Now.AddDays(-1)) );
    • Calendar.BlackoutDates.AddDatesInPast()。更多信息here.
    【解决方案4】:

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

    Caldr.DisplayDateStart = DateTime.Today;

    【讨论】:

      【解决方案5】:

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

      myCalendar.BlackoutDates.AddDatesInPast();
      

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

      【讨论】:

        【解决方案6】:

        This 是一个更简洁的解决方案,以防我们想通过 xaml 添加它。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            
              <DatePicker.BlackoutDates>
                 <CalendarDateRange End="{x:Static sys:DateTime.Today}" Start="{x:Static sys:DateTime.MinValue}" />
              </DatePicker.BlackoutDates>
            

            【讨论】:

              猜你喜欢
              • 2020-04-15
              • 2012-12-16
              • 2013-04-25
              • 2017-08-02
              • 2022-01-25
              • 1970-01-01
              • 1970-01-01
              • 2017-01-29
              • 1970-01-01
              相关资源
              最近更新 更多