开发者社区> wangccsy> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

第十五章:交互式界面(十三)

简介:
+关注继续查看

日期和时间选择

需要用户日期或时间的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的第二个参数。 可能最简单的是短日期格式,即两位数的月份,两位数的日期和四位数的年份,用斜线分隔:

<DatePicker __ >
    <DatePicker.MinimumDate>
        03/01/2016
    </DatePicker.MinimumDate>
    <DatePicker.MaximumDate>
        10/31/2016
    </DatePicker.MaximumDate>
    <DatePicker.Date>
        04/24/2016
    </DatePicker.Date>
</DatePicker>

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

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="DaysBetweenDates.DaysBetweenDatesPage">
    <ContentPage.Padding>
        <OnPlatform x:TypeArguments="Thickness"
                    iOS="10, 30, 10, 0"
                    Android="10, 10, 10, 0"
                    WinPhone="10, 10, 10, 0" />
    </ContentPage.Padding>
    <StackLayout>
        <StackLayout.Resources>
            <ResourceDictionary>
                <Style TargetType="DatePicker">
                    <Setter Property="Format" Value="D" />
                    <Setter Property="VerticalOptions" Value="Center" />
                    <Setter Property="HorizontalOptions" Value="FillAndExpand" />
                </Style>
            </ResourceDictionary>
        </StackLayout.Resources>
        <!-- Underlined text header -->
        <StackLayout Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
                     VerticalOptions="CenterAndExpand"
                     HorizontalOptions="Center">
            <Label Text="Days between Dates"
                   FontSize="Large"
                   FontAttributes="Bold"
                   TextColor="Accent" />
            <BoxView Color="Accent"
                   HeightRequest="3" />
        </StackLayout>
        <StackLayout Orientation="Horizontal"
                     VerticalOptions="CenterAndExpand">
            <Label Text="From:"
                   VerticalOptions="Center" />
 
            <DatePicker x:Name="fromDatePicker"
                        DateSelected="OnDateSelected" />
        </StackLayout>
        <StackLayout Orientation="Horizontal"
                     VerticalOptions="CenterAndExpand">
            <Label Text=" To:"
                   VerticalOptions="Center" />
            <DatePicker x:Name="toDatePicker"
                        DateSelected="OnDateSelected" />
        </StackLayout>
        <Label x:Name="resultLabel"
               FontSize="Medium"
              HorizontalOptions="Center"
              VerticalOptions="CenterAndExpand" />
    </StackLayout>
</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视图并计算两个日期之间的天数:

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

这是结果:
2018_09_20_132210

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
第二十二章:动画(十四)
你自己的等待动画在本章的下一节中,您将看到Xamarin.Forms实现的基础动画基础结构。这些底层方法允许您定义自己的动画函数,这些函数返回Task对象,并且可以与await一起使用。在第20章“异步和文件I / O”中,您了解了如何使用静态Task.Run方法创建执行的辅助线程,以执行像Mandelbrot计算这样的密集后台作业。
598 0
第二十二章:动画(五)
等待动画解决后续点击问题的另一种方法是在调用RotateTo之前初始化Rotation属性: void OnButtonClicked(object sender, EventArgs args) { button.Rotation = 0; button.RotateTo(360, 2000); } 现在,您可以在停止后再次点击按钮,它将从头开始动画。
1048 0
第二十一章:变换(十三)
垂直滑块?某些观点是否可以轮换并仍然可以正常工作? 更具体地说,Xamarin.Forms的普通水平Slider元素可以旋转成垂直滑块吗?我们来试试吧。 VerticalSliders程序在StackLayout中包含三个滑块,StackLayout本身逆时针旋转90度: <ContentPage xmlns="http://xamarin.
735 0
第二十章:异步和文件I/O.(十三)
通过该开销,可以开始实际编写应用程序。 TextFileAsyncPage的XAML文件与TextFileTryoutPage相同,但必须将代码隐藏文件设置为使用异步文件I / O方法。 必须在此处捕获文件I / O函数中可能发生的任何异常,这意味着任何可以抛出异常的方法必须与await运算符一起.
628 0
+关注
wangccsy
前一个帐号wangccsy@126.com不知道怎么的就成了企业帐号,改不成个人。所以重新注册了一个个人帐号。老程序员。精通JAVA,C#,数据库,对软件开发过程和流程熟悉。考取系统分析师,项目管理师和系统架构设计师等软件资格考试认证。愿意和大家一起前进。
983
文章
391
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载