Как создать и использовать пользовательский CultureInfo в WPF?

#wpf #vb.net

#wpf #vb.net

Вопрос:

Мне нужен метод для отображения формы WPF с нестандартным CultureInfo, который настраивается во время выполнения. Например. клиент хочет читать даты в «de-DE», но валюты в «en-US». Приложение должно иметь возможность отображать любую валюту в мире. Даты и числовые форматы почти «en-US» и «de-DE»

Я уже пробовал «CultureAndRegionInfoBuilder», но для регистрации созданной культуры приложению требуются права администратора, и он не обновит пользовательский интерфейс, если я использую то же имя для этой культуры (например, «x-myapp-custom»)

В «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».

Комментарии:

1. Привет! Я рекомендую прочитать weblog.west-wind.com/posts/2009/Jun/14 /… это предоставляет некоторую справочную информацию о том, как обрабатывать CultureInfo в приложении WPF. Важно отметить, что перед загрузкой XAML необходимо установить culture, и любые изменения, внесенные в него впоследствии, не будут отражены. Вам нужно иметь возможность изменять язык / язык во время выполнения?

2. Привет. Да, приложение должно иметь возможность изменять формат валюты во время выполнения. Я могу изменить язык формы (а не приложения) во время выполнения, если я перейду с «de-DE» на «en-EN» (buildin CultureInfos)