WPF DatePicker 仅显示可用日期

Posted

技术标签:

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

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

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

到目前为止,我有这个:

<DatePicker x:Name="DatePicker"
  SelectedDate="Binding SearchEngineCompassLogView.DateSearch,
      Mode=TwoWay, UpdateSourceTrigger=PropertyChanged"
  DataContext="StaticResource CompassLogView">
</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)
;

【讨论】:

以上是关于WPF DatePicker 仅显示可用日期的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 中更改 Material Design DatePicker 的外观

在 WPF 的 DatePicker 中显示当前日期

WPF DatePicker 显示时间和日期

DatePicker 显示默认日期 1/1/0001 - C# WPF

WPF DatePicker默认显示当前日期,格式化为年月日(转)

WPF DatePicker,显示今天的日期并绑定到属性