Wpf xceed datetimepicker中断日期

问题描述:

我正在努力寻找解决方案。标准的wpf datepicker控件拥有它的属性BlackoutDates,它禁用了过去的日期。我想为Wpf xceed datetimepicker控件实现这种功能,但不知道如何? 我想要管理的所有内容都是在datetimepicker设置某个值时禁用过去的日期。有任何想法吗?Wpf xceed datetimepicker中断日期

+0

什么Wpf Xceed DateTimePicker有标准控件没有?使用标准控制器可能会更好。 – Kcvin

+0

它有时间定义。在标准控制中,只有日期。 – Stojdza

既然BlackoutDates默认情况下不可用,您将不得不修改Xceed DateTimePicker。通过阅读here了解如何组成控制器。

接下来,请注意DateTimePicker的Calendar。然后观察this文档。

根据我的理解,您需要为采用某种DateTime集合的控件创建一个Dependency Property。在设置该属性的回调中,您将要采集该集合中的每个项目,并将其添加到PART_Calendar.BlackoutDates集合中。仅供参考,因为BlackoutDates是只读的,您不能让您的DP为CalendarBlackoutDatesCollection类型,只需在回调中设置BlackoutDates;相反,您需要手动将每个日期添加到日历的集合中。

+0

但BlackoutDates属性无法被我的控件识别。 – Stojdza

+0

我改变了我的答案。如果您有任何问题,请告诉我。 – Kcvin

不更改xceed工具包的实际源代码(完全可行)并修改日历部分。接下来最好的事情是将验证规则添加到控件的文本框中。

public class YearValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     DateTime date = value as DateTime; 
     if (date == null) 
      return new ValidationResult(false, "Chosen date cannot be null."); 

     if(BlackoutDatesDates.Contains(date)) 
      return new ValidationResult(false, "This date is blacked out."); 

     return ValidationResult.ValidResult; 
    } 
}