当当前区域设置改变时,我发现XAML文档会出现一些无效的行为。当我在窗口中有以下元素时:
<Window x:Class="WpfLocalizationLocBaml.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"
x:Name="wndTest"
Title="Test" Height="300" Width="300">
<StackPanel>
<TextBlock x:Name="lblCultureName"
Text="{Binding Source={x:Static glob:CultureInfo.CurrentCulture},
Path=DisplayName}" />
<TextBlock x:Name="lblLocaleDateValue"
Text="{Binding ElementName=wndTest, Path=TestDate}"/>
<TextBlock x:Name="lblLocaleNumberValue"
Text="{Binding ElementName=wndTest,Path=NumberValue,StringFormat=c}" />
</StackPanel>
</Window>
当我在窗体启动时运行MessageBox.Show(NumberValue.ToString("c"));,结果却不同。如果我使用默认语言运行表单,显然一切都很好。但是,如果我在代码或启动时更改文化,则日期和数字值的绑定仍显示en-US格式。MessageBox.Show()正确地显示了当前文化的值。
问题:WPF是否不尊重绑定中的CurrentCulture?如果是这样,那么到底是什么决定了用于绑定的文化。在我的情况下,显然是en-US,但无论我在项目中设置哪种默认语言,它始终以en-US绑定。
感谢任何想法...
IetfLanguageTag
已被弃用,可以使用.Name
代替。 - Mafii