我只是想补充一点,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} 添加到 Binding。
<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)
我希望这个额外的答案对某人有用。