DateTime XAML 语法
某些控件(如 Calendar 和 DatePicker)具有使用 DateTime 类型的属性。 虽然通常在运行时在代码隐藏中为这些控件指定初始日期或时间,但可以在 XAML 中指定初始日期或时间。 WPF XAML 分析器使用内置 XAML 文本语法处理 DateTime 值的分析。 本主题介绍 DateTime XAML 文本语法的具体内容。
何时使用 DateTime XAML 语法
在 XAML 中设置日期并不总是必要的,甚至可能不需要。 例如,可以使用 DateTime.Now 属性在运行时初始化日期,也可以根据用户输入对代码隐藏中的日历执行所有日期调整。 但是,在某些情况下,你可能希望将日期硬编码为控件模板中的 Calendar 和 DatePicker。 在这些场景中,必须使用 DateTime XAML 语法。
DateTime XAML 语法是一种本机行为
DateTime 是在 CLR 的基类库中定义的类。 由于基类库与 CLR 的其余部分的关系,因此无法对类应用 TypeConverterAttribute,并使用类型转换器处理 XAML 中的字符串,并将其转换为运行时对象模型中的 DateTime。 没有提供转换行为的 DateTimeConverter
类;本主题中所述的转换行为是 WPF XAML 分析器原生的。
为 DateTime XAML 语法设置字符串格式
可以使用格式字符串指定 DateTime 的格式。 格式字符串将可用于创建值的文本语法形式化。 现有 WPF 控件的 DateTime 值通常只使用 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”)
以下显示了 XAML 中 DateTime 的简短日期格式:
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
其他格式和模式
如前所述,XAML 中的 DateTime 可以指定为作为 DateTime.Parse输入接受的任何字符串。 这包括其他正式化格式(例如 UniversalSortableDateTimePattern),以及未正式化为特定 DateTimeFormatInfo 格式的格式。 例如,YYYY/mm/dd
表单可作为 DateTime.Parse的输入。 本主题不会尝试描述所有可能的格式,而是建议使用短日期模式作为标准做法。
另请参阅
- 在 WPF 中
XAML