Как установить максимальную дату / минимальную дату для WinPhone DatePicker

Я занимаюсь разработкой приложений для WinPhone.

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

Код не работает.

Я могу выбрать предыдущие годы, и я могу выбрать 2015, 2018 и т. Д. Если возможно, я бы хотел отключить месяцы и дни в самом DatePicker.

Короче говоря, я хотел бы установить минимальную и максимально допустимую дату для календаря, чтобы нежелательные даты были отключены в календаре.

3 ответа

Решение

Согласно документации, синтаксический анализатор 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}" />

Если вы используете 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/

В Winphone 8.1 нет способа установить минимальные и максимальные даты, но, как предложил Eugene Berdnikov в приведенном выше посте, вы можете установить MinYear и MaxYear для месяца и дня, которые вам придется обрабатывать при проверке кода.

Но в UWP(универсальная платформа Windows) есть CalendarDatePicker, с помощью которого вы можете установить свойства MinDate и MaxDate.

если вы хотите поддерживать Windows 10 и будущие выпуски, вы можете начать переход на UWP(универсальная платформа Windows)

Вот учебник по миграции

Это так же просто, как создание нового проекта 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

Вот список элементов управления датой и временем, доступных в UWP

Большинство устройств Windows Phone 8.1 также получили 10 обновлений, так что вы можете увидеть множество людей, движущихся к 10

Другие вопросы по тегам