我不确定这是否可能,但是否可以在 wpf 日期选择器中只制作一个可选择的日期列表?
我需要确保使用只能从一定数量的日期中选择。我可以使用下拉列表来做到这一点,但使用日期选择器会更好。
有任何想法吗?
我不确定这是否可能,但是否可以在 wpf 日期选择器中只制作一个可选择的日期列表?
我需要确保使用只能从一定数量的日期中选择。我可以使用下拉列表来做到这一点,但使用日期选择器会更好。
有任何想法吗?
具有以下DatePicker
属性来控制哪些日期应该是可选的:
DisplayDateStart:要包含在Calendar
弹出窗口中的第一个日期。
DisplayDateEnd:要包含在Calendar
弹出窗口中的最后日期。
因此,如果您有一个包含允许日期的列表,您可以设置DisplayDateStart
为列表中的第一项,以及列表DisplayDateEnd
中的最后一项。
这将阻止用户选择该范围之外的日期。
要处理允许日期列表包含间隙的情况,您可以使用该BlackoutDates
属性使日期范围不可选。
因此,要将列表中不存在的日期添加为涂黑,您可以执行以下操作。
日历弹出窗口中仅显示列表中的日期,列表中未显示的日期被涂黑,因此无法选择。
var dates = new List<DateTime>
{
new DateTime(2013, 1, 5),
new DateTime(2013, 1, 6),
new DateTime(2013, 1, 7),
new DateTime(2013, 1, 8),
new DateTime(2013, 1, 15),
new DateTime(2013, 1, 16),
new DateTime(2013, 1, 28),
new DateTime(2013, 1, 29),
new DateTime(2013, 2, 9),
new DateTime(2013, 2, 12),
new DateTime(2013, 2, 13),
new DateTime(2013, 2, 17),
new DateTime(2013, 2, 18)
};
var firstDate = dates.First();
var lastDate = dates.Last();
var dateCounter = firstDate;
foreach (var d in dates.Skip(1))
{
if (d.AddDays(-1).Date != dateCounter.Date)
{
dtp.BlackoutDates.Add(
new CalendarDateRange(dateCounter.AddDays(1), d.AddDays(-1)));
}
dateCounter = d;
}
dtp.DisplayDateStart = firstDate;
dtp.DisplayDateEnd = lastDate;
如果允许的日期相距很远,这可能对用户不太友好,因为将 90% 的日期涂黑会很烦人。在这种情况下,aComboBox
可能会更好。
您可以使用该集合执行您想要的操作,BlackoutDates
以防止用户选择您想要避免的所有日期。
代码:
myDatePicker.BlackoutDates.Add(myCalendarDateRange);
XAML:
<DatePicker Name="myDatePicker">
<DatePicker.BlackoutDates>
<CalendarDateRange Start="02.20.2013" End="02.22.2013" />
</DatePicker.BlackoutDates>
</DatePicker>
您需要创建自己的 ControlTemplate。最简单的方法是采用默认模板(您可以从下面的 URL 下载它)并更改您想要的部分。