2

我有一个 XAML 页面,其中一个 ListBox 绑定到客户对象的集合。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 元素的错误吗?

4

1 回答 1

0

这也被报告为Microsoft 论坛中的一个错误(尽管没有错误报告的链接)。Per 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>
于 2013-01-10T14:54:06.260 回答