5

我可能很累,但为什么会抛出异常:

 this.SomeDatePicker.SelectedDate = DateTime.Now.Date;

同样的情况发生在:

 this.SomeDatePicker.SelectedDate = DateTime.Now;

错误信息是:

System.ArgumentOutOfRangeException was unhandled
  Message=SelectedDate value is not valid.
Parameter name: d
  Source=PresentationFramework
  ParamName=d
  StackTrace:
       at System.Windows.Controls.Calendar.OnSelectedDateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
       at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
       at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
       at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
       at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
       at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
       at System.Windows.Controls.DatePicker.CoerceSelectedDate(DependencyObject d, Object value)
       at System.Windows.DependencyObject.ProcessCoerceValue(DependencyProperty dp, PropertyMetadata metadata, EntryIndex& entryIndex, Int32& targetIndex, EffectiveValueEntry& newEntry, EffectiveValueEntry& oldEntry, Object& oldValue, Object baseValue, Object controlValue, CoerceValueCallback coerceValueCallback, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, Boolean skipBaseValueChecks)
       at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
       at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
       at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
       ....
4

4 回答 4

6

如果您设置的日期存在于BlackoutDates.

AddDaysInPast方法应等效于:

Add(new CalendarDateRange(DateTime.MinValue, DateTime.Today.AddDays(-1)));

因此,除非当前时间在调用AddDaysInPastSelectedDate分配之间发生变化,否则您不应该遇到您描述的问题。

在调试中获取完整范围BlackoutDates并使用该信息更新您的问题,您可以使用以下内容:

string ranges = string.Join(
    Environment.NewLine,
    DatePicker.BlackoutDates.Select(r => string.Concat(r.Start, "|", r.End)));
于 2012-08-24T18:49:57.020 回答
1

如果DateTime.Now超出 DisplayDateStart 和 DisplayDateEnd OR 定义的范围,BlackoutDates则抛出异常。

于 2012-08-24T18:51:56.673 回答
0

谢谢 João Angelo、Ryan 的回答和 Ascension 的回答,我可以得到想要的结果:

if ( IsInmediate ) 
{
     SomeDatePicker.BlackoutDate.Clear();
     SomeDatePicker.SelectedDate = DateTime.Now;
     SomeDatePicker.BlackoutDate.AddDatesInPast();
}  
于 2012-08-24T19:24:28.553 回答
0

看:

ArgumentOutOfRangeException:指定的日期不在 DisplayDateStart 和 DisplayDateEnd 定义的范围内,或者指定的日期在 BlackoutDates 集合中。

字体:http: //msdn.microsoft.com/pt-br/library/system.windows.controls.datepicker.selecteddate.aspx

看例外!

您需要日期和时间还是只需要日期?

DateTime.Now.ToString("yyyy-MM-dd"); // only date

或者

DateTime.Now.ToString("yyyy-MM-dd hh:mm"); // date and hour
于 2012-08-24T18:59:20.857 回答