如何设置 Max Date / Min Date 到 WinPhone DatePicker
How to set Max Date / Min Date to WinPhone DatePicker
我正在开发 WinPhone 应用程序。
<DatePicker x:Name="MyDatePicker" MinYear="2016" MaxYear="2017"/>
代码无效。
我可以选择往年,也可以选择 2015、2018 等。如果可能,我想禁用 DatePicker 本身的月份和日期。
简而言之,我想为日历设置允许的最小和最大日期,以便在日历中禁用不需要的日期。
如果您正在使用 Xamarin.Forms 那么
<StackLayout>
<DatePicker VerticalOptions="CenterAndExpand" Date="{x:Static sys:DateTime.Now}">
<DatePicker.Format>yyyy-MM-dd</DatePicker.Format>
<DatePicker.MinimumDate>
<sys:DateTime x:FactoryMethod="Parse">
<x:Arguments>
<x:String>Jan 1 2000</x:String>
</x:Arguments>
</sys:DateTime>
</DatePicker.MinimumDate>
<DatePicker.MaximumDate>
<sys:DateTime x:FactoryMethod="Parse">
<x:Arguments>
<x:String>Dec 31 2050</x:String>
</x:Arguments>
</sys:DateTime>
</DatePicker.MaximumDate>
</DatePicker>
检索自 https://developer.xamarin.com/api/type/Xamarin.Forms.DatePicker/
如果你只想有年份,那么使用一个普通的选择器并在你接受的范围内给它一个年份列表。 https://developer.xamarin.com/api/type/Xamarin.Forms.Picker/
根据 documentation,XAML 解析器没有将字符串转换为日期作为 DateTimeOffset
对象的转换逻辑,因此 MinYear
和 MaxYear
属性 无法设置为 XAML 属性字符串。有设置这些属性的选项:
- 在 C# 代码中完成。可以找到示例 here.
- 在您的视图模型 class(或数据上下文中的另一个对象)中提供相关属性,并使用绑定将值传播到
DatePicker
控件。
查看模型class:
public DateTimeOffset MinYear
{
get { return new DateTime(2016, 1, 1); }
}
public DateTimeOffset MaxYear
{
get { return new DateTime(2017, 12, 31); }
}
XAML布局:
<DatePicker x:Name="MyDatePicker" MinYear="{Binding MinYear}" MaxYear="{Binding MaxYear}" />
在Winphone8.1中无法设置
最小和最大日期 但正如上面 post 中建议的 eugene-berdnikov 您可以设置 MinYear 和 MaxYear 对于您必须通过代码验证处理的月份和日期。
但是 UWP(Universal Windows Platform) 有一个 CalendarDatePicker,您可以使用它来设置 MinDate 和最大日期 属性
如果您想支持 windows 10 和未来的版本,您可以开始迁移到 UWP(通用 Windows 平台)
这是一个迁移tutorial
它就像创建一个新的 UWP 项目和复制现有文件并重写一些代码一样简单。
视图模型Class
public DateTimeOffset MinDate
{
get { return new DateTime(2016, 1, 1); }
}
public DateTimeOffset MaxDate
{
get { return new DateTime(2017, 12, 31); }
}
XAML布局
<CalendarDatePicker MinDate="{Binding MinDate}" MaxDate="{Binding MaxDate}"/>
代码隐藏
CalendarDatePicker calObj=new CalendarDatePicker();
DateTime minDate = new DateTime(2016, 1, 1, 0, 0, 0)
minDate = DateTime.SpecifyKind(minDate, DateTimeKind.Utc);
DateTimeOffset min_Date = minDate;
DateTime maxDate = new DateTime(2017, 1, 1, 0, 0, 0)
maxDate = DateTime.SpecifyKind(maxDate, DateTimeKind.Utc);
DateTimeOffset max_Date = maxDate;
calObj.MinDate=min_Date;
calObj.MaxDate=max_Date;
请注意,UWP 还支持 DatePicker,它是 windows phone 8.1
的一部分
我的建议是winphone8.1使用DatePicker和Windows10使用CalendarDatePicker
Here 是 UWP 中可用的日期和时间控件列表
大多数 windows phone 8.1 设备也更新了 10,因此您可能会看到很多人都在转向 10
我正在开发 WinPhone 应用程序。
<DatePicker x:Name="MyDatePicker" MinYear="2016" MaxYear="2017"/>
代码无效。
我可以选择往年,也可以选择 2015、2018 等。如果可能,我想禁用 DatePicker 本身的月份和日期。
简而言之,我想为日历设置允许的最小和最大日期,以便在日历中禁用不需要的日期。
如果您正在使用 Xamarin.Forms 那么
<StackLayout>
<DatePicker VerticalOptions="CenterAndExpand" Date="{x:Static sys:DateTime.Now}">
<DatePicker.Format>yyyy-MM-dd</DatePicker.Format>
<DatePicker.MinimumDate>
<sys:DateTime x:FactoryMethod="Parse">
<x:Arguments>
<x:String>Jan 1 2000</x:String>
</x:Arguments>
</sys:DateTime>
</DatePicker.MinimumDate>
<DatePicker.MaximumDate>
<sys:DateTime x:FactoryMethod="Parse">
<x:Arguments>
<x:String>Dec 31 2050</x:String>
</x:Arguments>
</sys:DateTime>
</DatePicker.MaximumDate>
</DatePicker>
检索自 https://developer.xamarin.com/api/type/Xamarin.Forms.DatePicker/
如果你只想有年份,那么使用一个普通的选择器并在你接受的范围内给它一个年份列表。 https://developer.xamarin.com/api/type/Xamarin.Forms.Picker/
根据 documentation,XAML 解析器没有将字符串转换为日期作为 DateTimeOffset
对象的转换逻辑,因此 MinYear
和 MaxYear
属性 无法设置为 XAML 属性字符串。有设置这些属性的选项:
- 在 C# 代码中完成。可以找到示例 here.
- 在您的视图模型 class(或数据上下文中的另一个对象)中提供相关属性,并使用绑定将值传播到
DatePicker
控件。
查看模型class:
public DateTimeOffset MinYear
{
get { return new DateTime(2016, 1, 1); }
}
public DateTimeOffset MaxYear
{
get { return new DateTime(2017, 12, 31); }
}
XAML布局:
<DatePicker x:Name="MyDatePicker" MinYear="{Binding MinYear}" MaxYear="{Binding MaxYear}" />
在Winphone8.1中无法设置 最小和最大日期 但正如上面 post 中建议的 eugene-berdnikov 您可以设置 MinYear 和 MaxYear 对于您必须通过代码验证处理的月份和日期。
但是 UWP(Universal Windows Platform) 有一个 CalendarDatePicker,您可以使用它来设置 MinDate 和最大日期 属性
如果您想支持 windows 10 和未来的版本,您可以开始迁移到 UWP(通用 Windows 平台)
这是一个迁移tutorial
它就像创建一个新的 UWP 项目和复制现有文件并重写一些代码一样简单。
视图模型Class
public DateTimeOffset MinDate
{
get { return new DateTime(2016, 1, 1); }
}
public DateTimeOffset MaxDate
{
get { return new DateTime(2017, 12, 31); }
}
XAML布局
<CalendarDatePicker MinDate="{Binding MinDate}" MaxDate="{Binding MaxDate}"/>
代码隐藏
CalendarDatePicker calObj=new CalendarDatePicker();
DateTime minDate = new DateTime(2016, 1, 1, 0, 0, 0)
minDate = DateTime.SpecifyKind(minDate, DateTimeKind.Utc);
DateTimeOffset min_Date = minDate;
DateTime maxDate = new DateTime(2017, 1, 1, 0, 0, 0)
maxDate = DateTime.SpecifyKind(maxDate, DateTimeKind.Utc);
DateTimeOffset max_Date = maxDate;
calObj.MinDate=min_Date;
calObj.MaxDate=max_Date;
请注意,UWP 还支持 DatePicker,它是 windows phone 8.1
的一部分我的建议是winphone8.1使用DatePicker和Windows10使用CalendarDatePicker
Here 是 UWP 中可用的日期和时间控件列表
大多数 windows phone 8.1 设备也更新了 10,因此您可能会看到很多人都在转向 10