Pracuję w Namibii. Namibia nie jest opcją w ustawieniach regionalnych i językowych systemu Windows, ale łączy je z RPA, więc wybieramy English South Africa, a następnie dostosowujemy symbolem waluty na "N $" (Namibijskie dolary), a nie "R "(Rand południowoafrykański).Jak korzystać z niestandardowych ustawień regionalnych i językowych systemu Windows w WPF
Nie mogę jednak przekonać WPF do korzystania z niestandardowej waluty. Używanie w kodzie string.format("{0:c}", foo)
działa dobrze, ale używając {Binding Path=SomeCurrencyValue, StringFormat=c
} `w XAML nadal używa symbolu" R ", a nie niestandardowego symbolu" N $ ".
W App.xaml.cs
ustawić kultury aplikacji z następującego kodu:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.LCID, true);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
new FrameworkPropertyMetadata(
System.Windows.Markup.XmlLanguage.GetLanguage(
System.Globalization.CultureInfo.CurrentUICulture.IetfLanguageTag)));
W demonstracji, tu jest jakiś kod XAML, który pokazuje problem:
<StackPanel>
<TextBlock>
Formatted in XAML with: <LineBreak/>
Text="{Binding Path=SomeCurrencyValue, StringFormat=c}" <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyValue, StringFormat=c, Mode=OneWay}"
Margin="5"/>
<TextBlock>
Formatted in code with: <LineBreak/>
return string.Format("{0:c}", SomeCurrencyValue); <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyString, Mode=OneWay}"
Margin="5"/>
</StackPanel>
DataContext
dla wyżej View zawiera Następujące:
public double SomeCurrencyValue
{
get { return 34.95; }
}
public string SomeCurrencyString
{
get
{
return string.Format("{0:c}", SomeCurrencyValue);
}
}
I do pobrania lt wygląda następująco:
wiem, że jest podobna kwestia here, ale miałem nadzieję, aby uzyskać lepsze odpowiedzi z pełniejszego pytanie. Pracuję głównie nad aplikacjami finansowymi dla klientów z Namibii, więc jest to dla mnie poważny problem - jeśli nie ma sposobu, aby to zrobić z .NET 4.0, rozważę zgłoszenie błędu, ale chciałem najpierw sprawdzić tutaj .
EDIT:
Właśnie otworzyła bounty na to pytanie. Mam nadzieję, że albo rozwiązanie, które nie jest drastycznym obejściem, albo potwierdzenie, że jest to błąd i powinno zostać zgłoszone jako takie.
Czy próbowałeś używać konwerterów? Czy to dla ciebie opcja? – katie77
Mój problem z używaniem konwerterów polega przede wszystkim na tym, że muszę ręcznie wykonać konwersję - przy pomocy stringformat w powiązaniu, powiązanie wymaga troski o dane wejściowe użytkownika, takie jak "N $ 50" lub "N $ 5 000 000,00". Robienie tego ręcznie nie będzie trywialne, chyba że mogę w jakiś sposób rozszerzyć domyślny konwerter, ale nie wiem, czy to będzie możliwe. –
Właśnie miałem opublikować odpowiedź, że możesz użyć własności 'Language' dla dowolnego' FrameworkElement', ale nie mogłem jej uruchomić z namibijskimi dolarami. Najbliżej znalazłem ' ' ale to jest Namibia English .. Również zauważyłem, że nie ma różnicy między prezentacją walutową z Xaml lub kodem –