Xamarin.Forms TimePicker
Представление Xamarin.Forms , позволяющее пользователю выбрать время.
Вызывает Xamarin.FormsTimePicker
элемент управления выбора времени платформы и позволяет пользователю выбрать время. TimePicker
определяет следующие свойства:
Time
типаTimeSpan
, выбранное время, которое по умолчанию имеетTimeSpan
значение 0. ТипTimeSpan
указывает длительность времени с полуночи.Format
типstring
, стандартная или настраиваемая строка форматирования .NET, которая по умолчанию имеет значение t, короткий шаблон времени.TextColor
типColor
, цвет, используемый для отображения выбранного времени, которое по умолчаниюColor.Default
.FontAttributes
типFontAttributes
, для которого по умолчанию используетсяFontAtributes.None
значение .FontFamily
типstring
, для которого по умолчанию используетсяnull
значение .FontSize
типdouble
, который по умолчанию соответствует -1.0.CharacterSpacing
с типомdouble
представляет собой интервал между знаками текстаTimePicker
.
Все эти свойства поддерживаются BindableProperty
объектами, что означает, что их можно стильировать, а свойства могут быть целевыми объектами привязки данных. Свойство Time
имеет режим BindingMode.TwoWay
привязки по умолчанию, что означает, что это может быть цель привязки данных в приложении, использующем архитектуру Model-View-ViewModel (MVVM).
Не TimePicker
включает событие, указывающее новое выбранное Time
значение. Если вам нужно уведомить об этом, можно добавить обработчик для PropertyChanged
события.
Инициализация свойства Time
В коде можно инициализировать Time
свойство в значение типа TimeSpan
:
TimePicker timePicker = new TimePicker
{
Time = new TimeSpan(4, 15, 26) // Time set to "04:15:26"
};
Time
При указании свойства в XAML значение преобразуется TimeSpan
в и проверяется, чтобы число миллисекунд было больше или равно 0, а количество часов меньше 24. Компоненты времени должны быть разделены двоеточиями:
<TimePicker Time="4:15:26" />
BindingContext
Если для свойства TimePicker
задан экземпляр ViewModel, содержащий свойство типа TimeSpan
с именем SelectedTime
(например), можно создать TimePicker
экземпляр следующим образом:
<TimePicker Time="{Binding SelectedTime}" />
В этом примере Time
свойство инициализируется SelectedTime
свойством в ViewModel. Time
Так как свойство имеет режим TwoWay
привязки, любой новый раз, когда пользователь выбирает, автоматически распространяется на ViewModel.
TimePicker
Если привязка для его Time
свойства не содержится, приложение должно присоединить обработчик к PropertyChanged
событию, чтобы получать сведения, когда пользователь выбирает новое время.
Сведения о настройке свойств шрифта см. в разделе "Шрифты".
TimePicker и макет
Можно использовать неограниченный горизонтальный макет, например Center
, Start
или End
с TimePicker
:
<TimePicker ···
HorizontalOptions="Center"
··· />
Однако это делать не рекомендуется. В зависимости от параметра Format
свойства выбранные времена могут потребовать разных ширин отображения. Например, строка формата "T" приводит TimePicker
к отображению времени в длинном формате, а "4:15:26" требует больше ширины отображения, чем короткий формат времени ("t") "4:15 AM". В зависимости от платформы это различие может привести TimePicker
к изменению ширины представления в макете или усечения дисплея.
Совет
Рекомендуется использовать параметр по умолчанию HorizontalOptions
и TimePicker
не использовать ширину Auto
при вводе TimePicker
в ячейкуGrid
.Fill
TimePicker в приложении
Пример включает в себя TimePicker
Entry
и Switch
представления на своей странице. Можно TimePicker
использовать для выбора времени и при появлении этого диалогового окна оповещения, которое напоминает пользователю текста в Entry
тексте, если Switch
он включен. Ниже приведен XAML-файл:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:SetTimer"
x:Class="SetTimer.MainPage">
<StackLayout>
...
<Entry x:Name="_entry"
Placeholder="Enter event to be reminded of" />
<Label Text="Select the time below to be reminded at." />
<TimePicker x:Name="_timePicker"
Time="11:00:00"
Format="T"
PropertyChanged="OnTimePickerPropertyChanged" />
<StackLayout Orientation="Horizontal">
<Label Text="Enable timer:" />
<Switch x:Name="_switch"
HorizontalOptions="EndAndExpand"
Toggled="OnSwitchToggled" />
</StackLayout>
</StackLayout>
</ContentPage>
Позволяет Entry
ввести текст напоминания, который будет отображаться при выборе времени. Свойство TimePicker
"T" назначается Format
для длительного формата. Он имеет обработчик событий, подключенный к PropertyChanged
событию, и Switch
обработчик подключен к его Toggled
событию. Эти обработчики событий находятся в файле программной части и вызывают SetTriggerTime
метод:
public partial class MainPage : ContentPage
{
DateTime _triggerTime;
public MainPage()
{
InitializeComponent();
Device.StartTimer(TimeSpan.FromSeconds(1), OnTimerTick);
}
bool OnTimerTick()
{
if (_switch.IsToggled && DateTime.Now >= _triggerTime)
{
_switch.IsToggled = false;
DisplayAlert("Timer Alert", "The '" + _entry.Text + "' timer has elapsed", "OK");
}
return true;
}
void OnTimePickerPropertyChanged(object sender, PropertyChangedEventArgs args)
{
if (args.PropertyName == "Time")
{
SetTriggerTime();
}
}
void OnSwitchToggled(object sender, ToggledEventArgs args)
{
SetTriggerTime();
}
void SetTriggerTime()
{
if (_switch.IsToggled)
{
_triggerTime = DateTime.Today + _timePicker.Time;
if (_triggerTime < DateTime.Now)
{
_triggerTime += TimeSpan.FromDays(1);
}
}
}
}
Метод SetTriggerTime
вычисляет время таймера на DateTime.Today
основе значения свойства и TimeSpan
значения, возвращаемого из объекта TimePicker
. Это необходимо, так как DateTime.Today
свойство возвращает текущую DateTime
дату, но с временем полуночи. Если таймер уже прошел сегодня, то предполагается, что завтра будет.
Таймер тикает каждую секунду, выполняя OnTimerTick
метод, который проверяет Switch
, включен ли текущий момент времени больше или равно времени таймера. Когда происходит время таймера, DisplayAlert
метод представляет диалоговое окно оповещения пользователю в качестве напоминания.
При первом запуске TimePicker
примера представление инициализируется до 11 утра. Касание TimePicker
вызывает средство выбора времени платформы. Платформы реализуют средство выбора времени очень разными способами, но каждый подход знаком пользователям этой платформы:
Совет
В Android диалоговое TimePicker
окно можно настроить, переопределив CreateTimePickerDialog
метод в пользовательском отрисовщике. Это позволяет, например, добавлять дополнительные кнопки в диалоговое окно.
После выбора времени выбранное время отображается в следующих TimePicker
элементах:
При условии, что Switch
переключатель переключается на положение, приложение отображает диалоговое окно оповещения, напоминающее пользователю о тексте при Entry
возникновении выбранного времени:
После отображения Switch
диалогового окна генерации оповещений переключается на положение выключения.