如何在StackPanel中使用DateTime字符串格式?

时间:2018-08-13 23:43:53

标签: c# wpf xaml

无论我如何格式化DateTime,AM / PM始终显示在左侧。我用过“ G”,“ hh:mm:ss tt”,我只是在输入随机数字后加上“ tt”,当它在堆栈面板中时,它总是出现在左侧。在堆栈面板外部,这很好。有什么想法吗?

create

输出: PM hh:mm:ss MM / dd / yyyy

2 个答案:

答案 0 :(得分:3)

使用具有不同文化的StringFormat将显示不同的价值,IMO更好的方法是使用Converter并将文化设置为InvariantCulture。当我刚接触WPF时,就一直面对这种情况,这种方法对我很有帮助。

<TextBlock Text="{Binding Timestamp, Converter={StaticResource DateTimeToStringConverter}}" 
           HorizontalAlignment="Right" FontSize="14"/>

并且您可以使用转换器使用您选择的字符串格式:

public class DateTimeToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is DateTime)
            return ((DateTime)value).ToString("G", CultureInfo.InvariantCulture);

        return null;
    }

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

答案 1 :(得分:2)

经过测试,可以正常工作。

TimeStamp必须为DateTime

public DateTime TimeStamp { get; set; } = DateTime.Now;

<TextBlock Text="{Binding TimeStamp, StringFormat='{}{0:tt hh:mm:ss MM/dd/yyyy}' }"/>