如何创建仅启用星期日的 DatePicker?

Posted

技术标签:

【中文标题】如何创建仅启用星期日的 DatePicker?【英文标题】:How do create a DatePicker with only Sundays enabled? 【发布时间】:2011-11-26 15:27:51 【问题描述】:

我需要允许用户从我的日期选择器中只选择星期天,所以我需要禁用其他列。但我找不到任何解决方案。目前我只是签入选择更改的事件,如果日期无效,则清除日期。如何完全禁用非星期日?

【问题讨论】:

【参考方案1】:

@kalyan's suggested link 中的相关部分涉及不适用日期,以及 DatePicker 的 BlackoutDates 属性,它允许您指定用户无法选择的日期范围。

该属性的类型为CalendarBlackoutDatesCollection,它是ObservableCollection<CalendarDateRange> 的子类。了解这一点后,您可以以编程方式将包括周一到周六的范围添加到此集合中,以便在日历上显示所有周。

MSDN 页面上描述了BlackoutDates 属性的一个重要注意事项:

在该集合已被选中时向该集合添加日期或添加 超出 DisplayDateStart 指定范围的日期和 DisplayDateEnd 将导致 ArgumentOutOfRangeException。

因此,请确保您知道这两个属性是如何定义的。

一个简单的例子:

//Code assumes a DateTimePicker declared in XAML with its Name property set to "calendar"
var minDate = calendar.DisplayDateStart ?? DateTime.MinValue;
var maxDate = calendar.DisplayDateEnd ?? DateTime.MaxValue;

//pardon the somewhat clunky DateTime.MaxValue handling here; it prevents an overflow
//when actually adding dates near the maximum
for (var d = minDate; d <= maxDate && (DateTime.MaxValue - d.AddDays(7)).Days > 7; d = d.AddDays(7))

    var range = new CalendarDateRange(d, d.AddDays(5));
    calendar.BlackoutDates.Add(range);

请注意: 默认情况下,DateTimePicker 的 DisplayDateStart/End 属性设置为 null。因此,上面的代码将除星期日之外的所有日子(从公元 0001 年 1 月 1 日到 9999 年 12 月 31 日)涂黑。这会导致在显示日历控件并与之交互时非常性能很差。因此,如果您要使用这种技术,我强烈建议您将选择器的开始和结束日期(以及中断日期范围的数量)限制在合理的范围内。

【讨论】:

感谢 djacobson,您的回答很好。 DateTime.MinValue 和 DateTime.MaxValue 有点慢所以我改变了它们然后它工作正常。再次感谢。 @janitheshan 不客气 - 如果有机会,不要忘记将答案标记为已接受,如果它适合您的话。谢谢。 :)【参考方案2】:

你提到了Calendar & DatePicker Walkthrough

【讨论】:

yes kalyan,但我找不到与我的问题相关的任何内容。无论如何感谢您的回复。

以上是关于如何创建仅启用星期日的 DatePicker?的主要内容,如果未能解决你的问题,请参考以下文章

将 DatePicker 中的第一天设置为星期一

在 jquery datepicker 中启用一个特定日期

jQuery UI Datepicker 仅启用数组中的特定日期

WPF DatePicker 仅显示可用日期

UIDatePicker 仅显示特定日期

Jquery Datepicker - 从 mysql 数据库启用日期