我只是想补充一下,在大多数情况下,loraderon的回答非常有用。当我将以下代码行放入App.xaml.cs中时,TextBlocks中的日期将以正确的区域性进行格式化。
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(System.Windows.Markup.XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
我说的是``大多数情况'',例如,可以立即使用:
<TextBlock Text="{Binding Path=Date, StringFormat={}{0:d MMMM yyyy}}" />
--> "16 mei 2013" (this is in Dutch)
...但是在TextBlock中使用Run's时,DateTime以默认区域性格式设置。
<TextBlock>
<Run Text="Datum: " />
<Run Text="{Binding Path=Date, StringFormat={}{0:d MMMM yyyy}, Mode=OneWay}" />
</TextBlock>
--> "Datum: 16 may 2013" (this is in English, notice the
name of the month "may" vs. "mei")
为此,我需要Gusdor的答案,即在绑定中添加ConverterCulture = {x:Static gl:CultureInfo.CurrentCulture}。
<TextBlock>
<Run Text="Datum: " />
<Run Text="{Binding Path=Date, StringFormat={}{0:d MMMM yyyy}, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}, Mode=OneWay}" />
</TextBlock>
--> "Datum: 16 mei 2013" (=Dutch)
我希望这个附加答案对某人有用。