c# – 使用“真正的”CultureInfo.CurrentCulture在WPF绑定,而不是CultureInfo从IetfLanguageTag

在我的情况下:

我有一个TextBlock绑定到类型DateTime的属性。
我想要它显示为用户的区域设置说。

<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />

我设置语言属性为WPF XAML Bindings and CurrentCulture Display
说:

this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);

但是使用这行代码,它只是显示文本作为CultureInfo的默认格式
与CurrentCulture的IetfLanguageTag说,不是作为在系统区域设置中选择的有效值说:

(例如,使用“de-DE”dd.MM.yyyy而不是选择的yyyy-MM-dd)

有没有方式绑定使用正确的格式,而不需要在每个单独的绑定上定义ConverterCulture?

在代码中

string.Format("{0:d}",Date);

使用正确的文化设置。

编辑:

另一种方式不工作,如所期望的(像this.Language = …):

xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"

<Binding Source="{x:Static glob:CultureInfo.CurrentCulture}" 
 Path="IetfLanguageTag" 
 ConverterCulture="{x:Static glob:CultureInfo.InvariantCulture}" />
您可以创建一个绑定子类(例如CultureAwareBinding),在创建时将ConverterCulture自动设置为当前文化。

这不是一个完美的解决方案,但它可能是唯一的一个,因为追溯性强制Binding尊重文化可能打破WPF其他代码取决于这种行为。

让我知道如果你需要更多的帮助!

http://stackoverflow.com/questions/5831455/use-real-cultureinfo-currentculture-in-wpf-binding-not-cultureinfo-from-ietfl

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 使用“真正的”CultureInfo.CurrentCulture在WPF绑定,而不是CultureInfo从IetfLanguageTag