如何在WPF中创建和使用自定义CultureInfo?

时间:2019-04-10 08:22:24

标签: wpf vb.net

我需要一种方法来显示带有非标准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”显示。

0 个答案:

没有答案