Номер отрицательной валюты XAML

У меня есть небольшая проблема с текущим форматом моего отрицательного номера валюты. Вот скриншот, возобновляющий мою ситуацию.

  • Вот как я использую StringFormat в моей привязке. (BTW, я пробовал только {0: C})
  • Как и ожидалось
  • Текущие настройки моего компьютера для отрицательного номера валюты 4.
  • Результат при запуске моего приложения

alt text

Почему результат не равен -0,08 $?

Любые идеи о том, как я должен действовать?

Спасибо за ваше время.

UPDATE:

Я попытался решить проблему с помощью конвертера, вот результат:

  • Я обнаружил, что Thread.CurrentThread.CurrentUICulture не совпадает с Thread.CurrentThread.CurrentCulture, поэтому я исправил его в своем App.xaml.cs. К сожалению, тот же результат.
  • Я попытался отобразить мои значения через конвертер, чтобы проверить, могу ли я отладить проблему. Дело в том, что культура, полученная в параметрах метода Convert, была в порядке, но ее CurrentNegativePattern была не такой, как в Thread.CurrentThread.CurrentCulture. Вероятно, это причина, по которой у меня есть эта проблема. на данный момент я буду использовать это: return ((double)value).ToString("C2", Thread.CurrentThread.CurrentCulture); в методе Convert моего конвертера.

Ответ 1

Попробуйте изменить CurrentCulture на CurrentUICulture:

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement),
    new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag))
);

Обратите внимание, что это может не использовать ваши региональные настройки. Объект CultureInfo описывает ваши региональные настройки, но то, что вы делаете с IetfLanguageTag, извлекает это для определенной культуры. В этой культуре нет настроек, которые вы внесли в свои региональные настройки.

В качестве альтернативы вы можете посмотреть опцию ConvertCulture привязки. Это действительно занимает CultureInfo.