当 CurrentCulture 更改时,我发现 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 绑定。
任何想法表示赞赏...
事实证明,WPF 默认情况下在绑定中不遵循 CurrentCulture,而是默认使用 XAML 文档或 en-US 中定义的 xml:Lang 设置(如果未提供)。这是相当蹩脚的行为 - 不知道为什么你不会像其他 UI 技术一样应用自动区域性格式,但是......
幸运的是,有一个简单的解决方法可以应用于文档的构造函数或 Window/UserControl 基类:
// MAKE SURE you set the language of the page explicitly or else
// all number and date formatting occurs using
this.Language = XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag);
这篇博文中提供了更多信息:
http://www.west-wind.com/weblog/posts/796725.aspx http://www.west-wind.com/weblog/posts/796725.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)