.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是类型为double的DatePicker文本字符之间的间距。
所有八个属性都由 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是类型为double的DatePicker文本字符之间的间距。 -
IsOpen类型为bool(双向),指示平台界面的日期选取器 UI 是否处于打开状态。
所有这些属性都由 BindableProperty 对象支持。 该 Date 属性的默认绑定模式为 BindingMode.TwoWay.
其他事件:
-
Opened和Closed事件指示平台日期选取器 UI 何时显示或关闭。
警告
设置 MinimumDate 和 MaximumDate 时,请确保 MinimumDate 始终小于或等于 MaximumDate。 否则, DatePicker 将引发异常。
确保DatePicker在Date和MinimumDate之间,并包括两个边界值。 如果 MinimumDate 或 MaximumDate 设置为不在 Date 它们之间, DatePicker 则调整其值 Date。
当用户选择日期时,DatePicker 引发 DateSelected 事件。
创建日期选择器(DatePicker)
DateTime在 XAML 中指定值时,XAML 分析器使用DateTime.Parse带CultureInfo.InvariantCulture参数的方法将字符串转换为DateTime值。 日期必须采用精确格式指定:两位数月份、两位数天数和四位数年份,用斜杠分隔:
<DatePicker MinimumDate="01/01/2022"
MaximumDate="12/31/2022"
Date="06/21/2022" />
以下屏幕截图显示了 iOS 上的结果 DatePicker :
如果将BindingContext属性设置为一个视图模型DatePicker的实例,并且该视图模型包含类型为DateTime的名为MinDate、MaxDate和SelectedDate的属性(例如),您可以这样实例化DatePicker:
<DatePicker MinimumDate="{Binding MinDate}"
MaximumDate="{Binding MaxDate}"
Date="{Binding SelectedDate}" />
在此示例中,所有三个属性都初始化为 viewmodel 中的相应属性。 由于该 Date 属性具有绑定模式 TwoWay,因此用户选择的任何新日期都会自动反映在 viewmodel 中。
如果DatePicker属性Date上没有绑定,您的应用程序应将处理程序附加到DateSelected事件,以便在用户选择新日期时获得通知。
在代码中,可以将MinimumDate、MaximumDate和Date属性初始化为DateTime类型的值。
DatePicker datePicker = new DatePicker
{
MinimumDate = new DateTime(2018, 1, 1),
MaximumDate = new DateTime(2018, 12, 31),
Date = new DateTime(2018, 6, 21)
};
有关设置字体属性的信息,请参阅 “字体”。
DatePicker 和布局
可以使用不受约束的水平布局选项,例如Center,Start或使用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 本地化:
找到“资源”部分。
导航到项目的
Platforms\Windows文件夹,然后使用代码编辑器或 Visual Studio 打开 Package.appxmanifest 文件。 如果使用 Visual Studio,请确保查看文件的原始 XML。 查找<Resources>部分,该部分最初可能包括:<Resources> <Resource Language="x-generate" /> </Resources>指定支持的语言。
为每种受支持的语言,将
<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 支持空值,使您能够在绑定中表示“未选择日期”和执行清除选择:
-
Date是DateTime? -
MinimumDate是DateTime? -
MaximumDate是DateTime?
行为说明:
- 默认情况下,如果未设置
Date,控件将使用今天的日期进行显示。 可以显式设置为Datenull显示未设置状态,并依赖用户输入来选择值。 - 在
DateMinimumDate/边界之外设置非 nullMaximumDate时,它会被调整到范围之内。 -
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