C# WPF日期选择器仅显示可用日期

C# WPF日期选择器仅显示可用日期,c#,wpf,datepicker,C#,Wpf,Datepicker,我有一个日期选择器,用户可以选择日期 我希望用户只选择可用日期。 可用日期存储在列表中 到目前为止,我有: <DatePicker x:Name="DatePicker" SelectedDate="{Binding SearchEngineCompassLogView.DateSearch, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DataContext="{StaticResource CompassLo

我有一个日期选择器,用户可以选择日期

我希望用户只选择可用日期。 可用日期存储在
列表中

到目前为止,我有:

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

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

BlackoutDates
是无法选择的日期集合()

例如:

 <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);
    }
}
private void datePicker\u已加载(对象发送方,RoutedEventArgs e)
{
DatePicker-picker=发件人作为日期选择器;
if(picker.DisplayDateStart==null | | picker.DisplayDateEnd==null)返回;
picker.BlackoutDates.Clear();
DateTime start=picker.DisplayDateStart.Value;
DateTime end=picker.DisplayDateEnd.Value;

while(开始)在这种情况下,使用日期选择器不会令人困惑。你不能使用简单的下拉列表/组合吗?
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)
};