【发布时间】:2014-01-22 19:35:39
【问题描述】:
根据我的应用程序中的设置,我需要能够显示在 XAML 中显示日期的不同格式。例如,它需要采用"yyyy/MM/dd" 格式或"MM/dd/yyyy" 格式。
有哪些方法可以实现这一目标?请注意,我的应用程序中需要处理的地方是有限的,因此即使是“现场修复”类型的解决方案也适用于我的情况。
感谢您的建议。
【问题讨论】:
标签: silverlight xaml silverlight-5.0
根据我的应用程序中的设置,我需要能够显示在 XAML 中显示日期的不同格式。例如,它需要采用"yyyy/MM/dd" 格式或"MM/dd/yyyy" 格式。
有哪些方法可以实现这一目标?请注意,我的应用程序中需要处理的地方是有限的,因此即使是“现场修复”类型的解决方案也适用于我的情况。
感谢您的建议。
【问题讨论】:
标签: silverlight xaml silverlight-5.0
您可以为此使用 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}" />
【讨论】:
这取决于您正在执行的操作的上下文,但如果您绑定到 DateTime,那么您可以像这样更改 StringFormat 属性:
<TextBlock Text="{Binding MyDateTimeVariable, StringFormat='yyyy/MM/dd'}" />
<TextBlock Text="{Binding MyDateTimeVariable, StringFormat='MM/dd/yyyy'}" />
Here 是一个很好的例子,可以通过这种方式实现一些不同的格式选项。
【讨论】: