Вопрос

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

<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 (Я не проверил это, хотя ...)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top