如何让WPF在绑定中使用24小时时间格式强制执行

时间:2013-05-07 15:11:49

标签: wpf cultureinfo

在一个应用程序中,我试图使用24小时日期格式,但遇到一个问题,我在xaml中的绑定仍然恢复显示12小时格式

在显示UI之前,我使用HH:mm和HH:mm:ss更新CultureInfo对象作为短时和长时格式。

然后,在UI中,我绑定到绑定中带有FormatString的DateTime对象

 <TextBlock Text="{Binding TimeTest, StringFormat=t}" />

我的期望是我会看到17:33,但最终会看到下午5:33。我们发现的一种解决方法是传递当前的文化,但是希望避免在可能使用时间的每个绑定上执行此操作。

<TextBlock Text="{Binding Date, StringFormat=t, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}" />

3 个答案:

答案 0 :(得分:0)

根据ConverterCulture属性的documentation

  

在XAML中,这[...]继承了页面根元素(或任何元素)的值。

这并不完美,但这肯定比必须在每个元素上设置它更好,假设它有效。

答案 1 :(得分:0)

正如您所发现的,问题在于WPF以与.NET其他部分不同的方式进行文化信息和本地化。

有一个很好的discussion of the problem here on SO

WPFGlue blog有一些进一步的细节

答案 2 :(得分:0)

您可以从Binding派生一个预设ConverterCulture的类,并使用它来代替原始绑定,例如

    Public Class Binding
        Inherits System.Windows.Data.Binding

        Public Sub New()
            MyBase.New()
            ConverterCulture = System.Globalization.CultureInfo.CurrentCulture
        End Sub
        Public Sub New(ByVal path As String)
            MyBase.New(path)
            ConverterCulture = System.Globalization.CultureInfo.CurrentCulture
       End Sub
    End Class

<TextBlock Text="{my:Binding TimeTest, StringFormat=t}" />

您也可以尝试自定义StringFormat,例如StringFormat ='HH:mm'