10

我在玩新的 Windows Store Universal App 模板,该模板可用于 Windows 8.1 和 Windows Phone 8.1,并且想知道如何在 XAML 代码中格式化字符串。

我尝试了什么(XAML):

 <TextBlock Text="{Binding TestItem.CurrentDate, StringFormat={}{0:MM/dd/yyyy}}" />

问题是StringFormatWindows.UI.Xaml.Controls.TextBox.

微软已经创建了一个关于格式化日期的示例项目。但是那里使用的方法是基于(丑陋的)代码。

所以,这是我的问题:

  • 为什么StringFormat在 Windows 应用商店通用应用中不可用?
  • 如何仅使用 XAML 代码格式化字符串?


编辑: 我决定使用转换器解决方案,对于那些感兴趣的人来说,这里是代码:

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();
    }
}

对于如何改进上述代码的每一条建议,我都很高兴,请随时发表评论。

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

4

1 回答 1

7

Windows 运行时项目类型中的 DataBinding 不支持 StringFormat 属性,您可以选择:

  • 使用已格式化的日期作为ViewModel 中的仅获取属性
  • 使用Converter - 您甚至可以创建 StringFormatConverter ,您可以在其中将 DateTime 格式作为ConverterParameter传递。这是这样的 StringFormatConverter 如何工作的解决方案。
于 2014-04-12T13:15:50.927 回答