WPF列表框中的日期未显示在正确的区域设置中

时间:2013-01-10 09:10:49

标签: wpf

我有一个XAML页面,其中ListBox绑定到Customer对象的集合。 Customer类具有CreatedDate属性,该属性绑定到ListBoxItem模板中的TextBox。出于某种原因,日期以美国格式出现(我在英国),尽管在App.xaml中添加了这个已知修复: -

FrameworkElement.LanguageProperty.OverrideMetadata(
   typeof(FrameworkElement),
   new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

页面上其他位置的日期格式正确。有什么想法吗?

更新: - ListBoxItem模板中的日期显示如下: -

<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding CreatedDate}"/>
        ...various other <Run elements ...
    </TextBlock.Inlines>
</TextBlock>

这似乎是问题所在。如果我使用普通而不是构造(即<TextBlock Text="{Binding CreatedDate}"/>)绑定CreatedDate,它会正确格式化。为什么会这样?这是Inlines元素的错误吗?

1 个答案:

答案 0 :(得分:0)

据报道,这也是Microsoft Forums中的一个错误(尽管没有错误报告的链接)。每个Mike Danes,论坛的主持人:

The problem is the Run element, this is not a FrameworkElement,
it's a FrameworkContentElement. 
Its language property was registered with a default value of en-US 
and it cannot be overriden.

与此同时,您可以通过在运行中设置语言来解决此问题(这在MS论坛中有建议,但我自己没有尝试过。)

另一种选择,如果你知道你想要一种特定的格式,就是在绑定中使用StringFormat选项:

<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding CreatedDate, StringFormat={}{0:dd/MMM/yyyy}}"/>
        ...various other <Run elements ...
    </TextBlock.Inlines>
</TextBlock>

请注意,ShortDate的StringFormat选项不起作用 - 您需要使用显式格式:

<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding CreatedDate, StringFormat=d}"/>
        ...various other <Run elements ...
    </TextBlock.Inlines>
</TextBlock>