我有一个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元素的错误吗?
答案 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>