Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6539547
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2019-09-06 14:32:44

需要用户日期或时间的Xamarin.Forms应用程序可以使用DatePicker或TimePicker视图。
它们非常相似:两个视图只在类似于Entry视图的框中显示日期或时间。 点击视图会调用特定于平台的日期或时间选择器。 然后,用户选择(或拨入)新的日期或时间并发出完成信号。
DatePicker
DatePicker有三个DateTime类型的属性:

  • MimumDate,初始化为1900年1月1日
  • MaximumDate,初始化为2100年12月31日
  • 日期,初始化为DateTime.Today

只要MinimumDate在MaximumDate之前,程序就可以将这些属性设置为它想要的任何属性。 Date属性反映了用户的选择。
如果您想在XAML中设置这些属性,可以使用x:DateTime元素。 使用DateTime.Parse方法可接受的格式以及CultureInfo.InvariantCulture的第二个参数。 可能最简单的是短日期格式,即两位数的月份,两位数的日期和四位数的年份,用斜线分隔:

 

点击(此处)折叠或打开

  1. <DatePicker __ >
  2.     <DatePicker.MinimumDate>
  3.         03/01/2016
  4.     </DatePicker.MinimumDate>
  5.     <DatePicker.MaximumDate>
  6.         10/31/2016
  7.     </DatePicker.MaximumDate>
  8.     <DatePicker.Date>
  9.         04/24/2016
  10.     </DatePicker.Date>
  11. </DatePicker>

DatePicker使用常规ToString方法显示所选日期,但您可以将视图的Format属性设置为自定义.NET格式字符串。 初始值为“d” - 短格式。
这是来自名为DaysBetweenDates的程序的XAML文件,它允许您选择两个日期,然后计算它们之间的天数。 它包含两个标记为To和From的DatePicker视图:

 

点击(此处)折叠或打开

  1. <ContentPage xmlns="" xmlns:x="" x:Class="DaysBetweenDates.DaysBetweenDatesPage">
  2.     <ContentPage.Padding>
  3.         <OnPlatform x:TypeArguments="Thickness"
  4.                     iOS="10, 30, 10, 0"
  5.                     Android="10, 10, 10, 0"
  6.                     WinPhone="10, 10, 10, 0" />
  7.     </ContentPage.Padding>
  8.     <StackLayout>
  9.         <StackLayout.Resources>
  10.             <ResourceDictionary>
  11.                 <Style TargetType="DatePicker">
  12.                     <Setter Property="Format" Value="D" />
  13.                     <Setter Property="VerticalOptions" Value="Center" />
  14.                     <Setter Property="HorizontalOptions" Value="FillAndExpand" />
  15.                 </Style>
  16.             </ResourceDictionary>
  17.         </StackLayout.Resources>
  18.         <!-- Underlined text header -->
  19.         <StackLayout Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
  20.                      VerticalOptions="CenterAndExpand"
  21.                      HorizontalOptions="Center">
  22.             <Label Text="Days between Dates"
  23.                    FontSize="Large"
  24.                    FontAttributes="Bold"
  25.                    TextColor="Accent" />
  26.             <BoxView Color="Accent"
  27.                    HeightRequest="3" />
  28.         </StackLayout>
  29.         <StackLayout Orientation="Horizontal"
  30.                      VerticalOptions="CenterAndExpand">
  31.             <Label Text="From:"
  32.                    VerticalOptions="Center" />
  33.  
  34.             <DatePicker x:Name="fromDatePicker"
  35.                         DateSelected="OnDateSelected" />
  36.         </StackLayout>
  37.         <StackLayout Orientation="Horizontal"
  38.                      VerticalOptions="CenterAndExpand">
  39.             <Label Text=" To:"
  40.                    VerticalOptions="Center" />
  41.             <DatePicker x:Name="toDatePicker"
  42.                         DateSelected="OnDateSelected" />
  43.         </StackLayout>
  44.         <Label x:Name="resultLabel"
  45.                FontSize="Medium"
  46.               HorizontalOptions="Center"
  47.               VerticalOptions="CenterAndExpand" />
  48.     </StackLayout>
  49. </ContentPage>

隐式样式将两个DatePicker视图的Format属性设置为“D”,这是longdate格式,包括星期和月份名称的文本日。 XAML文件使用两个水平StackLayout对象并排显示Label和DatePicker。
注意:如果使用长日期格式,则需要避免将DatePicker的HorizontalOptions属性设置为Start,Center或End。 如果将DatePicker放在水平StackLayout中(如在此程序中),请将HorizontalOptions设置为FillAndExpand。 否则,如果用户选择的文本字符串长于原始日期,则结果格式不正确。 DaysBetweenDates程序使用隐式样式为DatePicker提供FillAndExpand的HorizontalOptions值,以便它占据水平StackLayout的整个宽度,除了Label占用的内容。
当您点击其中一个DatePicker字段时,会出现特定于平台的面板。 在iOS上,它只占据屏幕的底部,但在Android和Windows 10 Mobile上,它几乎占据了屏幕:
2018_09_20_132105
注意iOS上的Done按钮,Android上的OK按钮和Windows Phone上的复选标记工具栏按钮。 所有这三个按钮都会关闭日期选择面板,并通过触发DateSelected事件返回到程序。 DaysBetweenDates代码隐藏文件中的事件处理程序访问两个DatePicker视图并计算两个日期之间的天数:

 

点击(此处)折叠或打开

  1. public partial class DaysBetweenDatesPage : ContentPage {
  2.     public DaysBetweenDatesPage()
  3.     {
  4.         InitializeComponent(); // Initialize. OnDateSelected(null, null);
  5.     } void OnDateSelected(object sender, DateChangedEventArgs args)
  6.     {
  7.         int days = (toDatePicker.Date - fromDatePicker.Date).Days;
  8.         resultLabel.Text = String.Format("{0} day{1} between dates",
  9.                                          days, days == 1 ? "" : "s");
  10.     }
  11. }

这是结果:
2018_09_20_132210

阅读(910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~