WPF StringFormat = {0: C}, показываю как доллары
-
03-10-2019 - |
Вопрос
Почему эта строка кода
<TextBlock Text="{Binding Net, StringFormat=c}"/>
Выведите результат как $ xx.xx Когда все мои региональные настройки установлены в Великобританию. Я ожидаю, что он выводил его как £ xx.xx. Есть идеи? Я пробовал разные вариации StringFormat, включая StringFormat = {} {0: C}, но все же получите тот же результат.
Спасибо за поиск.
Решение
Я не уверен, был ли это исправлено в .NET 4, но WPF никогда не поднял нынешнюю культуру при оказании таких вещей, как валюта или даты. Это то, что я считаю огромным надзором, но к счастью, легко исправить.
В вашем классе App:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
Видеть Это отличное пост Чтобы получить больше информации.
Другие советы
Я делаю язык = "en-gb" в главном окне, например,
<Window x:Class="AllocateWPF.Vouchers"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test" Height="692" Width="1000" Language="en-GB">
Что работает для меня:
1) в приложении .xaml переопределить onstartup () и добавить - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) Определить на уровне окна XAML @ xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3) в XAML - <TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
Этот правильно поднимает любое обычай региональные настройки. Хотя я использую вручную CultureInfo На первом шаге я уверен, что можно пройти в одном из статических типов - например. System.Globalization.cultureinfo.currentCulture (Я не проверил это, хотя ...)