Xaml 如何在Windows应用商店通用应用程序(W8.1+;WP8.1)中格式化日期?

Xaml 如何在Windows应用商店通用应用程序(W8.1+;WP8.1)中格式化日期?,xaml,windows-store-apps,windows-8.1,windows-phone-8.1,win-universal-app,Xaml,Windows Store Apps,Windows 8.1,Windows Phone 8.1,Win Universal App,我在玩新的Windows应用商店通用应用程序模板,它可以用于Windows 8.1和Windows Phone 8.1,我想知道如何在XAML代码中格式化字符串 我尝试的内容(XAML): 我很高兴收到关于如何改进上述代码的每一条建议,请随意评论 感谢Mikael Dúi Bolinder和Martin Suchan的建议/回答。Windows运行时项目类型中的数据绑定不支持StringFormat属性,您有以下选项: 在ViewModel中将已格式化的日期用作“仅获取”属性 使用转换器-您甚

我在玩新的Windows应用商店通用应用程序模板,它可以用于Windows 8.1和Windows Phone 8.1,我想知道如何在XAML代码中格式化字符串

我尝试的内容(XAML):

我很高兴收到关于如何改进上述代码的每一条建议,请随意评论


感谢Mikael Dúi Bolinder和Martin Suchan的建议/回答。

Windows运行时项目类型中的数据绑定不支持StringFormat属性,您有以下选项:

  • 在ViewModel中将已格式化的日期用作“仅获取”属性
  • 使用转换器-您甚至可以创建StringFormatConverter,在这里您可以将日期时间格式作为转换器参数传递。这种转换器是如何工作的

也许您应该创建一个转换器?是的,这是一个选项,但我不想在没有其他(更好的)方法之前这样做。您是如何在标记中链接转换器的?我的所有静态资源组合,相对。。等都失败了。另一方面:我觉得StringFormat丢失是很可笑的。现在是2014年,.NET4.5。在他们通过WindowsPhone8.1进行的所有会议中,没有人提到数据绑定控件上的日期格式?@JohnK:soo-true,我再也不了解微软了。我最近开始失去信心。100%同意,我越是为WP8.1编写代码,我也越怀疑他们知道自己在做什么。我浪费了很多时间试图做一些我认为需要几秒钟才能完成的事情,比如.ToString(“dd/mm/yyyy”),我现在已经放弃了,现在正在等待这篇文章的帮助。嘘!
 <TextBlock Text="{Binding TestItem.CurrentDate, StringFormat={}{0:MM/dd/yyyy}}" />
public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
            return null;

        if (!(value is DateTime))
            return null;

        var dateTime = (DateTime)value;

        var dateTimeFormatter = new DateTimeFormatter(YearFormat.Full,
            MonthFormat.Full,
            DayFormat.Default,
            DayOfWeekFormat.None,
            HourFormat.None,
            MinuteFormat.None,
            SecondFormat.None,
            new[] { "de-DE" },
            "DE",
            CalendarIdentifiers.Gregorian,
            ClockIdentifiers.TwentyFourHour);

        return dateTimeFormatter.Format(dateTime);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        string language)
    {
        throw new NotImplementedException();
    }
}