DateTime XAML 语法

某些控件(如 CalendarDatePicker)具有使用该 DateTime 类型的属性。 虽然通常在运行时在代码隐藏中为这些控件指定初始日期或时间,但可以在 XAML 中指定初始日期或时间。 WPF XAML 分析器使用内置的 XAML 文本语法来解析 DateTime 的值。 本主题介绍 XAML 文本语法的具体内容 DateTime

何时使用 DateTime XAML 语法

在 XAML 中设置日期并不总是必要的,甚至可能不需要。 例如,可以使用 DateTime.Now 属性在运行时初始化日期,也可以根据用户输入对代码隐藏中的日历执行所有日期调整。 但是,在某些情况下,你可能希望将日期硬编码到控制模板中的 CalendarDatePickerDateTime XAML 语法必须用于这些方案。

DateTime XAML 语法是原生行为

DateTime 是 CLR 基类库中定义的类。 由于基类库与 CLR 的其余部分相关,因此无法将 TypeConverterAttribute 应用于该类,也无法使用类型转换器来处理来自 XAML 的字符串,并在运行时对象模型中将其转换为 DateTime。 没有 DateTimeConverter 提供转换行为的类;本主题中所述的转换行为是 WPF XAML 分析器原生的。

为 DateTime XAML 语法设置字符串格式

可以用格式字符串指定 DateTime 的格式。 格式字符串将可用于创建值的文本语法形式化。 DateTime 现有 WPF 控件的值通常仅使用日期组件 DateTime 而不是时间组件。

在 XAML 中指定 DateTime 时,可以互换使用任何格式字符串。

还可以使用本主题中未专门显示的格式和格式字符串。 从技术上讲,任何由 WPF XAML 分析程序指定并解析的 DateTime 值的 XAML 实际上是通过内部调用 DateTime.Parse 来实现的,因此,您可以将任何 DateTime.Parse 接受的字符串用作 XAML 输入。 有关详细信息,请参阅 DateTime.Parse

重要

DateTime XAML 语法始终使用 en-us 作为 CultureInfo 进行其本机转换。 这不受 XAML 中的Language值或xml:lang值的影响,因为 XAML 属性级类型转换不起作用不依赖该上下文。 不要尝试内插由于文化差异而显示的格式字符串,例如日和月的显示顺序。 此处显示的格式字符串是分析 XAML 时使用的确切格式字符串,而不考虑其他区域性设置。

以下部分介绍一些常见的 DateTime 格式字符串。

短日期模式 (“d”)

下面显示了 DateTime 在 XAML 中的短日期格式:

M/d/YYYY

这是一种最简单的形式,它指定 WPF 控件的典型用法的所有必要信息,并且不受意外时区偏移与时间组件的影响,因此建议使用其他格式。

例如,若要指定 2010 年 6 月 1 日的日期,请使用以下字符串:

3/1/2010

有关详细信息,请参阅 DateTimeFormatInfo.ShortDatePattern

可排序的日期时间模式(“s”)

下面显示了 XAML 中的可排序 DateTime 模式:

yyyy'-'MM'-'dd'T'HH':'mm':'ss

例如,若要指定 2010 年 6 月 1 日的日期,请使用以下字符串(时间组件全部输入为 0):

2010-06-01T000:00:00

RFC1123模式(“r”)

RFC1123模式非常有用,因为它可能是来自其他日期生成器的字符串输入,它们也出于文化不变的原因使用RFC1123模式。 下面显示了 XAML 中的RFC1123 DateTime 模式:

ddd, dd MMM yyyy HH':'mm':'ss 'UTC'

例如,若要指定 2010 年 6 月 1 日的日期,请使用以下字符串(时间组件全部输入为 0):

Mon, 01 Jun 2010 00:00:00 UTC

其他格式和模式

如前所述, DateTime 可以在 XAML 中指定为任何可接受的字符串作为输入 DateTime.Parse。 这包括其他正式化格式(例如 UniversalSortableDateTimePattern),以及未作为特定 DateTimeFormatInfo 形式正式化的格式。 例如,表单 YYYY/mm/dd 作为 DateTime.Parse 的输入是可接受的。 本主题不会尝试描述所有可能的格式,而是建议使用短日期模式作为标准做法。

另请参阅