Xamarin.Forms DatePicker
Xamarin.Forms Widok, który umożliwia użytkownikowi wybranie daty.
Element Xamarin.FormsDatePicker
wywołuje kontrolkę selektora dat platformy i umożliwia użytkownikowi wybranie daty. DatePicker
definiuje osiem właściwości:
MinimumDate
typuDateTime
, który domyślnie jest domyślnie pierwszym dniem roku 1900.MaximumDate
typuDateTime
, który domyślnie jest domyślnie ostatnim dniem roku 2100.Date
typuDateTime
, wybrana data, która domyślnie ma wartośćDateTime.Today
.Format
typustring
, standardowy lub niestandardowy ciąg formatowania .NET, który domyślnie to "D", wzorzec daty długiej.TextColor
typuColor
, kolor używany do wyświetlania wybranej daty, która jest domyślnie ustawiona naColor.Default
.FontAttributes
typuFontAttributes
, który domyślnie ma wartośćFontAtributes.None
.FontFamily
typustring
, który domyślnie ma wartośćnull
.FontSize
typudouble
, który domyślnie ma wartość -1.0.CharacterSpacing
, typudouble
, to odstęp między znakamiDatePicker
tekstu.
Wyzwala DatePicker
zdarzenie DateSelected
, gdy użytkownik wybierze datę.
Ostrzeżenie
Podczas ustawiania MinimumDate
i MaximumDate
upewnij się, że MinimumDate
wartość jest zawsze mniejsza niż lub równa MaximumDate
. DatePicker
W przeciwnym razie zgłosi wyjątek.
Wewnętrznie zapewnia to Date
między DatePicker
MinimumDate
i MaximumDate
, włącznie. Jeśli MinimumDate
wartość lub MaximumDate
jest ustawiona tak, aby Date
nie mieściła się między nimi, DatePicker
dostosuje wartość Date
.
Wszystkie osiem właściwości jest wspieranych przez BindableProperty
obiekty, co oznacza, że można je stylizować, a właściwości mogą być obiektami docelowymi powiązań danych. Właściwość Date
ma domyślny tryb BindingMode.TwoWay
powiązania , co oznacza, że może być elementem docelowym powiązania danych w aplikacji korzystającej z architektury Model-View-ViewModel (MVVM ).
Inicjowanie właściwości DateTime
W kodzie można zainicjować MinimumDate
właściwości , MaximumDate
i Date
na wartości typu DateTime
:
DatePicker datePicker = new DatePicker
{
MinimumDate = new DateTime(2018, 1, 1),
MaximumDate = new DateTime(2018, 12, 31),
Date = new DateTime(2018, 6, 21)
};
DateTime
Gdy wartość jest określona w języku XAML, analizator XAML używa DateTime.Parse
metody z argumentemCultureInfo.InvariantCulture
, aby przekonwertować ciąg na DateTime
wartość. Daty muszą być określone w dokładnym formacie: dwucyfrowe miesiące, dwa cyfry dni i cztery cyfry lat oddzielone ukośnikami:
<DatePicker MinimumDate="01/01/2018"
MaximumDate="12/31/2018"
Date="06/21/2018" />
BindingContext
Jeśli właściwość DatePicker
właściwości jest ustawiona na wystąpienie modelu viewmodel zawierające właściwości typu DateTime
o nazwie MinDate
, MaxDate
i SelectedDate
(na przykład), możesz utworzyć wystąpienie podobne do następującegoDatePicker
:
<DatePicker MinimumDate="{Binding MinDate}"
MaximumDate="{Binding MaxDate}"
Date="{Binding SelectedDate}" />
W tym przykładzie wszystkie trzy właściwości są inicjowane do odpowiednich właściwości w modelu viewmodel. Date
Ponieważ właściwość ma tryb TwoWay
powiązania , każda nowa data wybrana przez użytkownika zostanie automatycznie odzwierciedlona w modelu widoku.
DatePicker
Jeśli właściwość nie zawiera powiązaniaDate
, aplikacja powinna dołączyć program obsługi do DateSelected
zdarzenia, aby zostać poinformowany, gdy użytkownik wybierze nową datę.
Aby uzyskać informacje o ustawianiu właściwości czcionki, zobacz Czcionki.
DatePicker i układ
Można użyć nieskonsekwowanej opcji układu poziomego, takiej jak Center
, Start
, lub End
z DatePicker
:
<DatePicker ···
HorizontalOptions="Center"
··· />
Nie jest to jednak zalecane. W zależności od ustawienia Format
właściwości wybrane daty mogą wymagać różnych szerokości wyświetlania. Na przykład ciąg formatu "D" powoduje DateTime
wyświetlanie dat w długim formacie, a "środa, 12 września 2018" wymaga większej szerokości wyświetlania niż "piątek, 4 maja 2018". W zależności od platformy ta różnica może spowodować DateTime
zmianę szerokości widoku w układzie lub obcięcie ekranu.
Napiwek
Najlepiej użyć domyślnego HorizontalOptions
Fill
ustawienia z wartością DatePicker
, a nie używać szerokości Auto
podczas umieszczania DatePicker
w komórce Grid
.
Platforma DatePicker w aplikacji
Przykład zawiera dwa DatePicker
widoki na swojej stronie. Mogą one służyć do wybierania dwóch dat, a program oblicza liczbę dni między tymi datami. Program nie zmienia ustawień MinimumDate
właściwości i MaximumDate
, więc dwie daty muszą należeć do zakresu od 1900 do 2100.
Oto plik 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"
xmlns:local="clr-namespace:DaysBetweenDates"
x:Class="DaysBetweenDates.MainPage">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="0, 20, 0, 0" />
</OnPlatform>
</ContentPage.Padding>
<StackLayout Margin="10">
<Label Text="Days Between Dates"
Style="{DynamicResource TitleStyle}"
Margin="0, 20"
HorizontalTextAlignment="Center" />
<Label Text="Start Date:" />
<DatePicker x:Name="startDatePicker"
Format="D"
Margin="30, 0, 0, 30"
DateSelected="OnDateSelected" />
<Label Text="End Date:" />
<DatePicker x:Name="endDatePicker"
MinimumDate="{Binding Source={x:Reference startDatePicker},
Path=Date}"
Format="D"
Margin="30, 0, 0, 30"
DateSelected="OnDateSelected" />
<StackLayout Orientation="Horizontal"
Margin="0, 0, 0, 30">
<Label Text="Include both days in total: "
VerticalOptions="Center" />
<Switch x:Name="includeSwitch"
Toggled="OnSwitchToggled" />
</StackLayout>
<Label x:Name="resultLabel"
FontAttributes="Bold"
HorizontalTextAlignment="Center" />
</StackLayout>
</ContentPage>
Każda z nich DatePicker
ma przypisaną Format
właściwość "D" dla formatu daty długiej. Zwróć również uwagę, że endDatePicker
obiekt ma powiązanie, które jest obiektem docelowym jego MinimumDate
właściwości. Źródło powiązania jest wybraną Date
właściwością startDatePicker
obiektu. Gwarantuje to, że data zakończenia jest zawsze późniejsza niż lub równa dacie rozpoczęcia. Oprócz dwóch DatePicker
obiektów obiekt ma etykietę Switch
"Uwzględnij oba dni w sumie".
DatePicker
Dwa widoki mają programy obsługi dołączone do DateSelected
zdarzenia, a Switch
program obsługi jest dołączony do jego Toggled
zdarzenia. Te programy obsługi zdarzeń znajdują się w pliku za kodem i wyzwalają nowe obliczenie dni między dwiema datami:
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
void OnDateSelected(object sender, DateChangedEventArgs args)
{
Recalculate();
}
void OnSwitchToggled(object sender, ToggledEventArgs args)
{
Recalculate();
}
void Recalculate()
{
TimeSpan timeSpan = endDatePicker.Date - startDatePicker.Date +
(includeSwitch.IsToggled ? TimeSpan.FromDays(1) : TimeSpan.Zero);
resultLabel.Text = String.Format("{0} day{1} between dates",
timeSpan.Days, timeSpan.Days == 1 ? "" : "s");
}
}
Po pierwszym uruchomieniu przykładu oba DatePicker
widoki są inicjowane do dzisiejszej daty. Poniższy zrzut ekranu przedstawia program uruchomiony w systemach iOS i Android:
Naciśnięcie jednego z ekranów DatePicker
wywołuje selektor dat platformy. Platformy implementują ten selektor dat na bardzo różne sposoby, ale każde podejście jest znane użytkownikom tej platformy:
Napiwek
W systemie Android DatePicker
okno dialogowe można dostosować, przesłaniając metodę CreateDatePickerDialog
w niestandardowym module renderowania. Umożliwia to na przykład dodanie dodatkowych przycisków do okna dialogowego.
Po wybraniu dwóch dat aplikacja wyświetla liczbę dni między tymi datami: