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 он будет выглядеть следующим образом:
При установке дат в 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 представляет элемент управления для отображения времени:
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 элемент будет выглядеть так:
По существу этот тот же элемент 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>