【问题标题】:Wpf xceed datetimepicker blackout datesWpf xceed datetimepicker 中断日期
【发布时间】:2014-04-01 00:55:58
【问题描述】:

我正在努力寻找解决方案。标准的 wpf datepicker 控件有它的属性 BlackoutDates,它可以禁用过去的日期。我想为 Wpf xceed datetimepicker 控件实现这种功能,但不知道怎么做? 我想要管理的只是在 datetimepicker 设置某个值时禁用过去的日期。有什么想法吗?

【问题讨论】:

  • Wpf Xceed DateTimePicker 有什么标准控件没有的?使用标准控件可能会更好。
  • 有时间定义。在标准控制中,只有日期。

标签: c# wpf datetimepicker


【解决方案1】:

由于BlackoutDates 默认不可用,您必须修改 Xceed DateTimePicker。通过阅读here,首先了解控件是如何组成的。

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

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

【讨论】:

  • 但我的控件无法识别 BlackoutDates 属性。
  • 我改变了我的答案。如果您有任何问题,请告诉我。
【解决方案2】:

无需更改 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多