Why does this line of code
<TextBlock Text="{Binding Net, StringFormat=c}"/>
Output the result as $xx.xx when all my regional settings are set to UK. I expect it to output it as £xx.xx. Any ideas? I have tried different variations of the stringformat including StringFormat={}{0:C} but still get the same result.
Thanks for looking.
I'm not sure if this has been fixed in .NET 4, but WPF has never picked up the current culture when rendering things like currency or dates. It's something I consider a massive oversight, but thankfully is easily corrected.
In your App class:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
See this excellent post for more information.
I do Language="en-GB" in the main window e.g.
<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">
What works for me:
1) In app.xaml override OnStartup() and add - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) Define in XAML @ Window level - xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3) In XAML - <TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
This correctly picks up any custom regional settings. Although I'm using a manually created CultureInfo in the first step, I'm sure it's possible to pass in one of the static types - eg. System.Globalization.CultureInfo.CurrentCulture (I haven't tested it though...)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With