WPF Datepicker 只能选择日期列表

标签 wpf wpf-controls datepicker

我不确定这是否可行,但是否可以在 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% 的日期涂黑会很烦人。在这种情况下,ComboBox 可能会更好。

关于WPF Datepicker 只能选择日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14932596/

相关文章:

wpf - 在 Qt 中构建 "hierarchical"GUI 应该使用什么概念?

WPF 两个命令处理程序,一个命令

c# - 多列组合框中的选定值

c# - 每个 Viewmodel 实例化一个 View(同一类型的多个 View)

iphone - 如何在 iOS 的 UIDatePicker 中禁用以前的时间

jquery-ui - 如何在 jQuery-UI 中初始化预格式化的日期选择器?

c# - 在关闭主窗口时在 ViewModel 中放置一个计时器

wpf - 防止 WPF 中的 Menu 控件的菜单关闭

c# - 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信,因为它处于 Faulted 状态

javascript - 将日期选择器值设置为空