10

我正在开发 WinPhone 应用程序。

<DatePicker x:Name="MyDatePicker" MinYear="2016" MaxYear="2017"/>

代码不起作用。

我可以选择前几年,也可以选择 2015 年、2018 年等。如果可能,我想禁用 DatePicker 本身中的月份和日期。

简而言之,我想为日历设置最小和最大允许日期,以便在日历中禁用不需要的日期。

4

3 回答 3

5

根据文档,XAML 解析器没有将字符串作为DateTimeOffset对象转换为日期的转换逻辑,因此MinYear无法MaxYear将属性设置为 XAML 属性字符串。有一些选项可以设置这些属性:

  1. 在 C# 代码中执行此操作。一个例子可以在这里找到。
  2. 在视图模型类(或数据上下文中的另一个对象)中提供相关属性并使用绑定将值传播到DatePicker控件。

查看模型类:

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}" />
于 2017-08-30T19:08:50.773 回答
4

如果您使用的是 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/

于 2017-08-30T04:33:33.447 回答
1

在 Winphone 8.1 中,无法设置最小和最大日期,但正如eugene-berdnikov在上面的帖子中建议的那样,您可以为必须通过代码验证处理的月份和日期设置MinYearMaxYear 。

但是UWP(通用 Windows 平台)有一个CalendarDatePicker使用它可以设置MinDateMaxDate属性

如果您想支持 Windows 10 和未来版本,您可以开始迁移到 UWP(通用 Windows 平台)

这是一个迁移教程

它就像创建一个新的 UWP 项目并复制现有文件并重写一些代码一样简单。

视图模型类

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 的一部分

我的建议是在 winphone 8.1 使用 DatePicker 和 Windows 10 使用 CalendarDatePicker

是 UWP 中可用的日期和时间控件的列表

大多数 Windows Phone 8.1 设备也进行了 10 更新,因此您可能会看到很多人正在向 10 移动

于 2017-09-04T14:11:53.637 回答