在运行时在XAML中弯曲日期格式

时间:2014-01-22 19:35:39

标签: silverlight xaml silverlight-5.0

根据我的应用程序中的设置,我需要能够显示在XAML中显示日期的不同格式。例如,它需要采用"yyyy/MM/dd"格式或"MM/dd/yyyy"格式。

我可以通过哪些方式实现这一目标?请注意,我需要处理的应用程序中的位置是有限的,所以即使是“现场修复”类型的解决方案也适用于我的情况。

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

这取决于你正在做什么的上下文,但如果你绑定到DateTime,那么你可以改变StringFormat属性,如下所示:

<TextBlock Text="{Binding MyDateTimeVariable, StringFormat='yyyy/MM/dd'}" />
<TextBlock Text="{Binding MyDateTimeVariable, StringFormat='MM/dd/yyyy'}" />

Here是一个很好的例子,可以像这样实现一些不同的格式选项。

答案 1 :(得分:1)

您可以使用ValueConverter。只需将YourApplicationSettings.YearFirst替换为从中提取设置的任何位置。

public class DateTime2FlexibleDateString : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var dt = value as DateTime?
        if (dt== null)
        {
            return null;
        }

        var dateTime = dt.Value;

        if (YourApplicationSettings.YearFirst)
        {
            return dateTime.ToString("yyyy/MM/dd");
        }

        return dateTime.ToString("MM/dd/yyyy");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}

然后,在需要它的每个xaml文件中,或者在App.xaml(或添加到App.xaml中的资源字典)中,为转换器添加静态资源。

<UserControl.Resources>
    <converters:DateTime2FlexibleDateString x:Key="DateTime2FlexibleDateString" />
</UserControl.Resources>

然后当你绑定到日期时,指定转换器。

<TextBlock Text="{Binding MyDateTimeVariable, Converter={StaticResource DateTime2FlexibleDateString}" />