Как установить Max Date/Min Date для WinPhone DatePicker
Я разрабатываю приложения для WinPhone.
<DatePicker x:Name="MyDatePicker" MinYear="2016" MaxYear="2017"/>
Код не работает.
Я могу выбрать предыдущие годы, и я могу выбрать 2015, 2018 и т.д. Если возможно, я хотел бы отключить месяцы и дни в самой DatePicker.
Короче говоря, я хотел бы установить минимальную и максимальную разрешенную дату для календаря, чтобы нежелательные даты были отключены в календаре.
Ответы
Ответ 1
Согласно документации, анализатор XAML не имеет логики преобразования для преобразования строк в даты в качестве объектов DateTimeOffset
, поэтому MinYear
и MaxYear
свойство не может быть установлено как строка атрибута XAML. Существуют опции для установки этих свойств:
- Сделать это в коде С#. Пример можно найти здесь.
- Чтобы предоставить соответствующие свойства в классе модели просмотра (или другом объекте в контексте данных) и использовать привязки для распространения значений в элементе управления
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}" />
Ответ 2
Если вы используете 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/
Ответ 3
В Winphone 8.1 нет способа установить
минимальные и максимальные даты, но как eugene-berdnikov, предложенные в вышеуказанном сообщении, вы можете установить MinYear и MaxYear в течение месяца и дня, которые вам придется обрабатывать с помощью проверки кода.
Но UWP (Universal Windows Platform) имеет CalendarDatePicker, с помощью которого вы можете установить свойства MinDate и MaxDate
если вы хотите поддерживать Windows 10 и будущие выпуски, вы можете начать переход на UWP (Universal Windows Platform)
Ниже приведена миграция учебник
Это так же просто, как создание нового проекта UWP и копирование существующих файлов и переписывание всего кода.
Класс ViewModel
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-телефона 8.1.
Мое предложение в winphone 8.1 использует DatePicker и Windows 10 для использования CalendarDatePicker
Здесь есть список элементов управления Дата и время, доступных в UWP
Большинство устройств Windows Phone 8.1 имеют 10 обновлений, поэтому вы можете увидеть, как много людей двигаются в направлении 10