Выбор даты и времени. DatePicker и TimePicker

Последнее обновление: 10.01.2021

DatePicker

DatePicker предназначен для выбора дат. Для его управления могут использоваться следующие свойства:

  • MaximumDate: максимальная возможная дата, по умолчанию равна 31 декабря 2100

  • MinimumDate: минимальная возможная дата, по умолчанию равна 1 января 1900

  • Date: выбранная дата, по умолчанию равна значению DateTime.Today

  • Format: определяет формат даты

Например:

using Xamarin.Forms;
using System;

namespace HelloApp
{
    public partial class MainPage : ContentPage
    {
        Label label;
        DatePicker datePicker;
        public MainPage()
        {
            label = new Label { Text = "Выберите дату" };
            datePicker = new DatePicker
            {
                Format = "D",
                MaximumDate = DateTime.Now.AddDays(5),
                MinimumDate = DateTime.Now.AddDays(-5)
            };
            datePicker.DateSelected += datePicker_DateSelected;
            StackLayout stack = new StackLayout { Children = { label, datePicker } };
            this.Content = stack;
        }

        private void datePicker_DateSelected(object sender, DateChangedEventArgs e)
        {
            label.Text = "Вы выбрали " + e.NewDate.ToString("dd/MM/yyyy");
        }
    }
}

Чтобы отследить выбор даты, мы можем использовать обработчик события DateSelected

Но при создании элемента надо учитывать, что в конечном счете Xamarin использует стандартные механизмы для отображения этого элемента на каждой конкретной мобильной платформе. Так, на Android он будет выглядеть следующим образом:

DatePicker in Xamarin

При установке дат в XAML необходимо передавать значение в формате, которое бы будет понятно для DateTime.Parse(). Наиболее простой способ заключается в использовании краткого формата даты "MM/dd/yyyy". Так, аналогичный пример в xaml выглядел бы следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HelloApp.MainPage">
  <StackLayout>
    <Label x:Name="label" Text="Выберите дату" FontSize="Medium" />
	<DatePicker Format="D" DateSelected="datePicker_DateSelected">
      <DatePicker.MinimumDate>6/01/2016</DatePicker.MinimumDate> 
      <DatePicker.MaximumDate>6/30/2016 </DatePicker.MaximumDate>
    </DatePicker>
  </StackLayout>
</ContentPage>

И в этом случае нам надо задать обработчик события выбора даты с файле кода:

using Xamarin.Forms;

namespace HelloApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private void datePicker_DateSelected(object sender, DateChangedEventArgs e)
        {
            if(label!=null)
                label.Text = "Вы выбрали " + e.NewDate.ToString("dd/MM/yyyy");
        }
    }
}

TimePicker

TimePicker представляет элемент управления для отображения времени:

using Xamarin.Forms;

namespace HelloApp
{
    public partial class MainPage : ContentPage
    {
        Label label;
        TimePicker timePicker;
        public MainPage()
        {
            //InitializeComponent();
            label = new Label { Text = "Выберите время" };
            timePicker = new TimePicker() { Time = new System.TimeSpan(17, 0, 0)};
            timePicker.PropertyChanged += TimePicker_PropertyChanged;

            StackLayout stack = new StackLayout { Children = { label, timePicker } };
            this.Content = stack;
        }

        private void TimePicker_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
			if (args.PropertyName == "Time")
			{
				label.Text = "Вы выбрали " + timePicker.Time;
			}  
        }
    }
}

Если необходимо отследить выбор времени в TimePicker, то можно подписаться на событие PropertyChanged.

Конкретное отображение TimePickera также будет зависеть от конкретной платформы. Например, на Android элемент будет выглядеть так:

TimePicker in Xamarin

По существу этот тот же элемент Entry с дополнительными возможностями для установки времени.

Создание TimePicker в xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="HelloApp.MainPage">
    <StackLayout>
        <Label x:Name="label" Text="Выберите дату" FontSize="Medium" />
        <TimePicker x:Name="timePicker" Time="17:00:00" PropertyChanged="TimePicker_PropertyChanged"></TimePicker>
    </StackLayout>
</ContentPage>
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850