【问题标题】:WPF DatePicker to Display only available DatesWPF DatePicker 仅显示可用日期
【发布时间】:2013-02-17 15:34:02
【问题描述】:

我有一个 DatePicker,因此用户可以选择日期。

我希望用户只选择可用的日期。 可用日期存储在List

到目前为止,我有这个:

<DatePicker x:Name="DatePicker"
  SelectedDate="{Binding SearchEngineCompassLogView.DateSearch,
      Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
  DataContext="{StaticResource CompassLogView}">
</DatePicker>

【问题讨论】:

  • 在这种情况下,使用日期选择器不会令人困惑。你不能用简单的下拉列表/组合吗?

标签: c# wpf datepicker


【解决方案1】:

您可以使用BlackoutDates 属性,但在此解决方案中,您必须指定DisplayDateStartDisplayDateEnd

BlackoutDates 是一组不可选择的日期 (msdn)。

例子:

 <DatePicker x:Name="datePicker" 
                    Loaded="datePicker_Loaded"
                    DisplayDateStart="2000/01/01"
                    DisplayDateEnd="2050/01/01"
                    />

加载的事件处理程序:

private void datePicker_Loaded(object sender, RoutedEventArgs e)
{
    DatePicker picker = sender as DatePicker;

    if (picker.DisplayDateStart == null || picker.DisplayDateEnd == null) return;

    picker.BlackoutDates.Clear();

    DateTime start = picker.DisplayDateStart.Value;
    DateTime end = picker.DisplayDateEnd.Value;

    while (start <= end)
    {
        if (!availableDates.Contains(start))
        {
            picker.BlackoutDates.Add(new CalendarDateRange(start, start));
        }
        start = start.AddDays(1);
    }
}

有可用日期的集合:

List<DateTime> availableDates = new List<DateTime> 
{
    new DateTime(2013, 03, 01),
    new DateTime(2013, 03, 02),
    new DateTime(2013, 03, 03),
    new DateTime(2013, 03, 31),
    new DateTime(2013, 02, 01),
    new DateTime(2013, 02, 02),
    new DateTime(2013, 05, 01),
    new DateTime(2013, 05, 02)
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2013-02-02
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多