如何创建仅启用星期日的 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?的主要内容,如果未能解决你的问题,请参考以下文章