DatePicker

.NET 多平台应用 UI (.NET MAUI) DatePicker 调用平台的日期选取器控件,并允许你选择日期。

DatePicker 定义八个属性:

  • MinimumDate 类型为 DateTime,默认为 1900 年的第一天。
  • MaximumDate 类型 DateTime,默认为 2100 年的最后一天。
  • Date 类型 DateTime,所选日期,默认值为值 DateTime.Today
  • Format 类型 string标准自定义 .NET 格式字符串,默认为“D”,即长日期模式。
  • TextColor 类型 Color,用于显示所选日期的颜色。
  • FontAttributes 类型 FontAttributes,默认为 FontAtributes.None.
  • FontFamily 类型 string,默认为 null.
  • FontSize 类型 double,默认为 -1.0。
  • CharacterSpacing是类型为doubleDatePicker文本字符之间的间距。

所有八个属性都由 BindableProperty 对象提供支持,这意味着可以设置这些属性的样式,并且这些属性可以是数据绑定的目标。 该 Date 属性具有默认绑定模式 BindingMode.TwoWay,这意味着它可以是使用 Model-View-ViewModel (MVVM) 模式的应用程序中的数据绑定的目标。

DatePicker 定义以下属性:

  • MinimumDate 为类型 DateTime?,最小可选择日期(设置为 null 移除下限约束)。 默认值为 1900-01-01。
  • MaximumDate 类型 DateTime?,最高可选择日期(设置为 null 删除上限)。 默认值为 2100-12-31。
  • Date 类型 DateTime?,所选日期。 如果未显式设置日期,则默认为今天。 设置为 null 表示未选择日期。
  • Format 类型 string标准自定义 .NET 格式字符串,默认为“D”,即长日期模式。
  • TextColor 类型 Color,用于显示所选日期的颜色。
  • FontAttributes 类型 FontAttributes,默认为 FontAtributes.None.
  • FontFamily 类型 string,默认为 null.
  • FontSize 类型 double,默认为 -1.0。
  • CharacterSpacing是类型为doubleDatePicker文本字符之间的间距。
  • IsOpen 类型为 bool(双向),指示平台界面的日期选取器 UI 是否处于打开状态。

所有这些属性都由 BindableProperty 对象支持。 该 Date 属性的默认绑定模式为 BindingMode.TwoWay.

其他事件:

  • OpenedClosed 事件指示平台日期选取器 UI 何时显示或关闭。

警告

设置 MinimumDateMaximumDate 时,请确保 MinimumDate 始终小于或等于 MaximumDate。 否则, DatePicker 将引发异常。

确保DatePickerDateMinimumDate之间,并包括两个边界值。 如果 MinimumDateMaximumDate 设置为不在 Date 它们之间, DatePicker 则调整其值 Date

当用户选择日期时,DatePicker 引发 DateSelected 事件。

创建日期选择器(DatePicker)

DateTime在 XAML 中指定值时,XAML 分析器使用DateTime.ParseCultureInfo.InvariantCulture参数的方法将字符串转换为DateTime值。 日期必须采用精确格式指定:两位数月份、两位数天数和四位数年份,用斜杠分隔:

<DatePicker MinimumDate="01/01/2022"
            MaximumDate="12/31/2022"
            Date="06/21/2022" />

以下屏幕截图显示了 iOS 上的结果 DatePicker

iOS 上的 DatePicker 控件的屏幕截图。

如果将BindingContext属性设置为一个视图模型DatePicker的实例,并且该视图模型包含类型为DateTime的名为MinDateMaxDateSelectedDate的属性(例如),您可以这样实例化DatePicker

<DatePicker MinimumDate="{Binding MinDate}"
            MaximumDate="{Binding MaxDate}"
            Date="{Binding SelectedDate}" />

在此示例中,所有三个属性都初始化为 viewmodel 中的相应属性。 由于该 Date 属性具有绑定模式 TwoWay,因此用户选择的任何新日期都会自动反映在 viewmodel 中。

如果DatePicker属性Date上没有绑定,您的应用程序应将处理程序附加到DateSelected事件,以便在用户选择新日期时获得通知。

在代码中,可以将MinimumDateMaximumDateDate属性初始化为DateTime类型的值。

DatePicker datePicker = new DatePicker
{
    MinimumDate = new DateTime(2018, 1, 1),
    MaximumDate = new DateTime(2018, 12, 31),
    Date = new DateTime(2018, 6, 21)
};

有关设置字体属性的信息,请参阅 “字体”。

DatePicker 和布局

可以使用不受约束的水平布局选项,例如CenterStart或使用EndDatePicker

<DatePicker ···
            HorizontalOptions="Center" />

但是不建议这样做。 根据属性的设置 Format ,所选日期可能需要不同的显示宽度。 例如,“D”格式字符串导致 DateTime 以长格式显示日期,而“2018 年 9 月 12 日星期三”的显示宽度比“2018 年 5 月 4 日星期五”要大。 根据平台的不同,这种差异可能会导致 DateTime 视图在布局中更改宽度,或使显示器被截断。

小窍门

最好在HorizontalOptions单元格中放置Fill时使用默认设置DatePickerAutoDatePicker,而不要使用宽度Grid

本地化 Windows 上的日期选择器

对于面向 Windows 的应用程序,确保 DatePicker 显示的日期格式符合用户的本地设置,包括选取器对话框中的月份和日期名称,需要在项目的 Package.appxmanifest 文件中进行特定配置。 本地化软件包清单中的元素符合用户区域的文化规范,从而提高用户体验。

本地化日期格式和字符串 <xref:Microsoft.Maui.Controls.DatePicker> 要求在 Package.appxmanifest 文件中声明支持的语言。

按照以下步骤在 Windows 上配置 DatePicker 本地化:

  1. 找到“资源”部分。

    导航到项目的 Platforms\Windows 文件夹,然后使用代码编辑器或 Visual Studio 打开 Package.appxmanifest 文件。 如果使用 Visual Studio,请确保查看文件的原始 XML。 查找 <Resources> 部分,该部分最初可能包括:

    <Resources>
        <Resource Language="x-generate" />
    </Resources>
    
  2. 指定支持的语言。

    为每种受支持的语言,将 <Resource Language="x-generate"> 替换为 <Resource /> 元素。 语言代码应采用 BCP-47 语言标记的形式,例如 en-US 英语(美国)、西班牙语(西班牙)、 es-ESfr-FR 法语(法国)或 de-DE 德语(德国)。 例如,若要添加对英语(美国)和西班牙语(西班牙)的支持,应修改分区 <Resources> 如下所示:

    <Resources>
        <Resource Language="en-US" />
        <Resource Language="es-ES" />
    </Resources>
    

此配置可确保 DatePicker 根据用户的区域设置显示日期格式、月份和天数,从而显著增强应用在不同区域的可用性和可访问性。

有关 .NET MAUI 应用中的本地化的详细信息,请参阅 本地化

可为 Null 的选定日期 (.NET 10)

在 .NET 10 中,DatePicker 支持空值,使您能够在绑定中表示“未选择日期”和执行清除选择:

  • DateDateTime?
  • MinimumDateDateTime?
  • MaximumDateDateTime?

行为说明:

  • 默认情况下,如果未设置 Date,控件将使用今天的日期进行显示。 可以显式设置为Datenull显示未设置状态,并依赖用户输入来选择值。
  • DateMinimumDate/边界之外设置非 null MaximumDate时,它会被调整到范围之内。
  • MinimumDate / MaximumDate 可以设置为 null 删除该绑定。

具有可为 null 的绑定和用于清除所选内容的操作的 XAML 示例。

<VerticalStackLayout>
    <DatePicker Date="{Binding SelectedDate}"
                            MinimumDate="{Binding MinDate}"
                            MaximumDate="{Binding MaxDate}" />

    <Button Text="Clear date" Command="{Binding ClearDateCommand}" />
    <Label Text="Selected: {Binding SelectedDate}" />
</VerticalStackLayout>

ViewModel 草图:

public partial class MyViewModel : ObservableObject
{
        [ObservableProperty]
        private DateTime? selectedDate;

        [ObservableProperty]
        private DateTime? minDate = new DateTime(2020, 1, 1);

        [ObservableProperty]
        private DateTime? maxDate = new DateTime(2030, 12, 31);

        [RelayCommand]
        void ClearDate() => SelectedDate = null;
}

:: include ../../includes/mvvm-toolkit-note.md

可以在代码中设置或取消

datePicker.Date = null;                 // Clear selection (no date)
datePicker.MinimumDate = null;          // No lower bound
datePicker.MaximumDate = null;          // No upper bound
datePicker.Date = new DateTime(2025, 8, 19); // Set a specific date

以编程方式打开和关闭日期选取器

::: include ../../includes/pickers-open-close-dotnet10.md