如何将最大日期/最小日期设置为WinPhone DatePicker

时间:2017-08-02 09:06:37

标签: windows-phone-8 datepicker win-phone-silverlight-8.1

我正在开发WinPhone应用程序。

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

代码无效。

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

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

3 个答案:

答案 0 :(得分:5)

根据documentation,XAML解析器没有将字符串转换为日期DateTimeOffset对象的转换逻辑,因此MinYearMaxYear属性不可能设置为XAML属性字符串。可以选择设置这些属性:

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

    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}" />
    

答案 1 :(得分: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/

答案 2 :(得分:1)

在Winphone 8.1中,无法设置 最低和最高日期但是在上面的帖子中建议您eugene-berdnikov,您可以设置 MinYear MaxYear ,以便您有必要的月份和日期处理代码验证。

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

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

以下是迁移tutorial

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

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

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

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

大多数Windows Phone 8.1设备也有10次更新,所以你可能会看到很多人走向10