我在WPF中编程,并且有一个接口,其中制造日期和到期日期是两个日期选择器。如何将到期日期日期选择器设置为只选择大于生产日期的日期?
但是,用户仍然可以使用日期选择器的文本框部分输入任何到期日期。为了处理此问题,您需要验证两个日期选择器的SelectedDate属性。
我已经附上了同时做这两件事的代码(为了这个问题的目的,我假设你没有使用MVVM——如果你让我知道的话):
首先,在XAML中,过期日期选择器的DisplayDateStart依赖属性绑定到生产日期选择器的SelectedDate依赖属性(从而在过期日期选择器日历弹出窗口中隐藏无效日期)。由于您的要求是"仅大于生产日期",因此需要在生产日的第二天返回值转换器。
<StackPanel>
<StackPanel.Resources>
<yournamespace:NextDayConverter x:Key="NextDayConverter" />
</StackPanel.Resources>
<DatePicker x:Name="ManufacturingDatePicker"
SelectedDateChanged="OnSelectedDateChanged" />
<DatePicker x:Name="ExpiryDatePicker"
SelectedDateChanged="OnSelectedDateChanged"
DisplayDateStart="{Binding
ElementName=ManufacturingDatePicker,
Path=SelectedDate,
Converter={StaticResource NextDayConverter}}" />
</StackPanel>
NextDayConverter的详细信息如下:
namespace YourNamespace
{
using System;
using System.Globalization;
using System.Windows.Data;
public sealed class NextDayConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
DateTime manufacturingDate = (DateTime)value;
DateTime minimumExpiryDate = manufacturingDate.AddDays(1);
return minimumExpiryDate;
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
其次,在代码背后,有一个处理程序用于处理两个日期选择器的SelectedDateChanged事件。如果用户输入了无效的有效期(即早于或等于生产日期),则此处的验证代码将有效期设置为生产日期。
private void OnSelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
if (ManufacturingDatePicker.SelectedDate.HasValue &&
ExpiryDatePicker.SelectedDate.HasValue &&
ExpiryDatePicker.SelectedDate <= ManufacturingDatePicker.SelectedDate)
{
ExpiryDatePicker.SelectedDate = ManufacturingDatePicker.SelectedDate.Value.AddDays(1);
}
}
我希望这能有所帮助。