2011-09-28 49 views
4

我需要允許用戶只從我的日期選擇器中選擇星期日,所以我需要禁用其他列。但我找不到任何解決方案。目前我只是檢查選擇更改的事件,並清除日期,如果無效。我如何完全禁用非星期日?如何創建僅啓用星期日的DatePicker?

回答

9

相關部分@kalyan's suggested link問候日期限制和的DatePicker的BlackoutDates財產,它可以讓你指定日期用戶不能選擇的範圍。

該屬性的類型爲CalendarBlackoutDatesCollection,它是ObservableCollection<CalendarDateRange>的子類。瞭解這一點,您可以以編程方式將包括星期一到星期六在內的範圍添加到此集合中,以在所有星期內顯示在日曆上。

要注意的是對於BlackoutDates屬性的MSDN頁面描述一個重要的考慮:

添加日期到這個集合的時候就已經被選中或添加 通過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日的所有日子。這導致極端日曆控件顯示並與之交互時性能較差。所以如果你打算使用這種技術,我強烈建議將選取者的開始和結束日期(以及因此的日期範圍數)限制在合理範圍內。

+0

謝謝djacobson你的回答很好。它與DateTime.MinValue和DateTime.MaxValue有點慢,所以我改變了它們,然後它工作正常。再次感謝。 – janitheshan

+0

@janitheshan不客氣 - 當你有機會時,不要忘記標記答案爲Accepted,如果它適合你。謝謝。 :) –

+0

我試過隊友,但需要15個聲望。 :( – janitheshan

相關問題