我正在使用UWP中的CalendarDatePicker控件。日期的格式应本地化为用户选择的区域性,该区域性不必与操作系统语言设置相同。我希望日期格式与myCultureInfo.DateTimeFormat.ShortDatePattern相同(例如mm/dd/yyyy)。CalendarDatePicker公开了一个应采用类似于{month.integer}/{day.integer}/{year.full}.的格式的DateFormat属性我需要一个用于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属性,但没有明显的效果。
发布于 2018-09-03 12:11:19
是的,您可以通过使用CalendarDatePicker的DateTimeFormatter属性来设置CalendarDatePicker的DateFormat,该属性告诉DateTimeFormatter如何通过提供格式模板或格式模式的字符串来格式化值。Language属性用于获取或设置应用于CalendarDatePicker的本地化/全球化语言信息。
具有shortdate DateFormat属性的不同Language也可能具有不同的日期格式。你可以看到语言en-US和fr-FR的不同。
<StackPanel>
<CalendarDatePicker Language="en-US" DateFormat="shortdate"/>
<CalendarDatePicker Language="fr-FR" DateFormat="shortdate"/>
</StackPanel>因此,您可能需要使用CultureInfo类来获取当前区域性。
对于DateFormat转换,你可以从你的设备设置应用程序中获得所有的ShortTimePattern:Settings=> time & Language=> Data& time => Change date => Time format,在Short date部件中,你可以看到所有的格式。然后根据ShortTimePattern返回对应的DateFormat字符串。下面是一些代码示例:
var shortDataPattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern;
Debug.WriteLine(shortDataPattern);
switch (shortDataPattern)
{
case "M/d/yyyy":
// return "shortdate" or the following
return "{}{month.integer}/{day.integer}/{year.full}";
case "M/d/yy":
return ...
...//Other format
}发布于 2018-09-04 21:04:53
对于在这里尝试的任何人来说,这至少会本地化日期格式和星期的第一天,但不会本地化月份的名称:
<CalendarDatePicker
Language="{x:Bind ViewModel.CalendarLanguageCode, Mode=OneWay}"
FirstDayOfWeek="{x:Bind ViewModel.CalendarFirstDayOfWeek, Mode=OneTime, Converter={StaticResource SystemDayOfWeekToWindowsDayOfWeekConverter}}"
DateFormat="shortdate"
Date="{x:Bind ViewModel.Date, Mode=TwoWay}"/>( SystemDayOfWeekToWindowsDayOfWeekConverter的实现是从System.DayOfWeek到Windows.Globalization.DayOfWeek的简单转换)
https://stackoverflow.com/questions/52103406
复制相似问题