【发布时间】:2018-08-30 18:36:56
【问题描述】:
我在 UWP 中使用 CalendarDatePicker 控件。日期的格式应本地化为用户选择的文化,这不一定与操作系统语言设置相同。我希望日期格式与 myCultureInfo.DateTimeFormat.ShortDatePattern 相同(例如 mm/dd/yyyy)。 CalendarDatePicker 公开了 DateFormat 属性,该属性的格式应类似于 {month.integer}/{day.integer}/{year.full}。我需要一个用于 XAML 绑定的转换器。似乎应该有一个简单的方法来做到这一点。
<!-- In XAML -->
<CalendarDatePicker
FirstDayOfWeek="{x:Bind ViewModel.CalendarFirstDayOfWeek, Mode=OneTime, Converter={StaticResource SystemDayOfWeekToWindowsDayOfWeekConverter}}"
DateFormat="{x:Bind ViewModel.DateFormat, Mode=OneWay, Converter={StaticResource DateTimeFormatToDateTimeFormatterTemplateConverter}"
Date="{x:Bind ViewModel.Date, Mode=TwoWay, Converter={StaticResource DateTimeToDateTimeOffsetConverter}}"/>
//Converter
public class DateTimeFormatToDateTimeFormatterTemplateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
//What goes here?
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
编辑: 理想情况下,CalendarDatePicker 将只有一个 CultureInfo 属性来处理所有这些。我尝试了 Language 属性,但没有明显效果。
【问题讨论】:
-
需要自己转换。得到ShortDatePattern值后,可以根据该值转换CalendarDatePicker的DateTimeFormatter,如
ShortDatePattern="M/d/yyyy"则指定DateFormat="shortdate"。 -
@BreezeLiu-MSFT 你能用代码示例澄清一下吗? CalendarDatePicker 的 DateTimeFormatter 未公开公开,因此我无法在其上设置 ShortDatePattern。看起来我只能访问 DateFormat 属性,然后将其传递给 DateTimeFormatter 构造函数。我也尝试过这样的事情:Language="en-UK" DateFormat="shortdate",但它不起作用。
-
更正:“en-UK”不是有效的语言代码。如果我使用有效的语言代码并明确设置日期格式(例如“en-GB”)并绑定一周的第一天,它就可以工作。但是,所有这些仍然没有本地化日历弹出窗口中的月份名称。
标签: localization datetime-format uwp-xaml globalization cultureinfo