WPF StringFormat = {0: C}, показывающий как доллары

Почему эта строка кода

 

Выведите результат как $ xx.xx, когда все мои региональные настройки установлены в Великобритании. Я ожидаю, что он выведет его как £ xx.xx. Есть идеи? Я пробовал различные варианты строкового формата, включая StringFormat = {} {0: C}, но все равно получаю тот же результат.

Спасибо, что посмотрели.

    Я не уверен, что это было исправлено в .NET 4, но WPF никогда не поднимал текущую культуру, когда делал такие вещи, как валюта или даты. Это то, что я считаю огромным недосмотром, но, к счастью, легко исправляется.

    В вашем classе App:

     protected override void OnStartup(StartupEventArgs e) { FrameworkElement.LanguageProperty.OverrideMetadata( typeof(FrameworkElement), new FrameworkPropertyMetadata( XmlLanguage.GetLanguage( CultureInfo.CurrentCulture.IetfLanguageTag))); base.OnStartup(e); } 

    См. Этот отличный пост для получения дополнительной информации.

    Я делаю Language = “en-GB” в главном окне, например

      

    Что работает для меня:
    1) В app.xaml переопределить OnStartup () и добавить – System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");

    2) Определить на уровне XAML @ Window – xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"

    3) В XAML –

    Это правильно подбирает любые пользовательские региональные настройки. Хотя на первом этапе я использую созданную вручную CultureInfo , я уверен, что можно пройти в один из статических типов – например. System.Globalization.CultureInfo.CurrentCulture (я его не тестировал, хотя …)

    Давайте будем гением компьютера.