我需要一种方法来显示带有非标准CultureInfo的WPF表单,该表单可以在运行时进行自定义。例如。客户希望以“ de-DE”读取日期,而以“ en-US”读取货币。该应用程序应该能够显示世界上每种货币。日期和数字格式几乎都是“ en-US”和“ de-DE”
我已经尝试过“ CultureAndRegionInfoBuilder”,但是它要求应用程序具有管理员权限才能注册所创建的区域性,并且如果我对该区域性使用相同的名称(例如“ x-myapp-custom”,则不会更新UI) )
在启动时的“ Application.xaml.vb”中:
Private Sub CreateCustomCulture(thisCultureName As String)
Dim myCultureBuilder = New CultureAndRegionInfoBuilder(thisCultureName, CultureAndRegionModifiers.Neutral)
myCultureBuilder.LoadDataFromRegionInfo(RegionInfo.CurrentRegion) 'DE
myCultureBuilder.LoadDataFromCultureInfo(Thread.CurrentThread.CurrentCulture) 'de-DE
Try
myCultureBuilder.Register()
Catch ex As Exception
Debug.WriteLine(ex.ToString)
End Try
End Sub
即使它需要“以管理员身份运行”以注册CultureInfo,它也可以正常工作
在“ testwindow.xaml.vb”中:
Private Sub Testwindow_Loaded(sender As Object, e As RoutedEventArgs)
Me.Language = Markup.XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentUICulture.Name)
End Sub
这也很好。
但是,当我尝试更改Thread.CurrentThread.CurrentUICulture.NumberFormat.CurrencySymbol = "$"
时,该设置存储在CultureInfo中,但未反映WPF表单。即使我注销并重新注册了CultureInfo并再次设置了WPF语言。
我希望绑定的文本框({Binding TestCurrency, ElementName=testwindow, StringFormat=\{0:C2\}}
)以“ en-US”样式(或至少带有美元符号)显示,但始终以“ de-DE”显示。