C# IValueConverter在Windows Phone 7中获得错误的区域性
我在Windows Phone 7中创建了一个值转换器C# IValueConverter在Windows Phone 7中获得错误的区域性,c#,.net,windows-phone-7,globalization,cultureinfo,C#,.net,Windows Phone 7,Globalization,Cultureinfo,我在Windows Phone 7中创建了一个值转换器 public class MyConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { // ... } // ... } 。。。像这样使用它 <Tex
public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// ...
}
// ...
}
。。。像这样使用它
<TextBlock Text="{Binding SomeField, Converter={StaticResource MyConverter}, ConverterParameter=SomeParameter}" <!-- ... --> />
你有没有试着去查一下
可能是WP7中的一个bug,但没有传入。不是bug,而是预期的行为。请参阅MSConnect上的这篇文章
解决方案是将PhoneApplicationPage
的Language
属性设置为CurrentCulture,如下所示:
Language = XmlLanguage.GetLanguage(
Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName);
<TextBlock Language="de-DE" Text="..." />
或者也可以使用Language
属性在XAML中指定区域性,如下所示:
Language = XmlLanguage.GetLanguage(
Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName);
<TextBlock Language="de-DE" Text="..." />
但更好的解决方案是不使用依赖于区域性的值转换器
编辑:我写了一篇关于替代解决方案的博客:我刚刚遇到了这个问题
我用以下方法解决了这个问题:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Format(culture, "{0:N}, value);
}
使用区域性转换控制转换,但还必须确保将值参数保留为对象。更改其类型会影响string.Format与之交互的方式。抱歉,但这如何解决区域性包含错误值的问题(使用en-US而不是电话设置中配置的区域性)?啊-抱歉。这可能会有帮助。它描述了这个问题和解决方法:你的第一个建议听起来不错,我应该把它放在我页面的构造函数中,还是放在以后调用的事件中?在构造函数中。否则,您可能会面临无法及时应用的风险。好的,但现在区域性参数是“de”,而不是“de de”,当我在任何.Format方法中使用它时,会导致IndexOutfrange异常(尝试了DateTime和String)…对。如果还需要子区域性,请尝试使用Name
属性,而不是twoletteisolanguagename
。但是,我再次强烈建议不要在转换器中使用依赖于区域性的代码。好的,现在它可以工作了,谢谢。如果您鼓励在转换器中不使用依赖于区域性的代码,您将如何将TextBlock绑定到DateTime,并使其将输出格式化为当前区域性的短日期?我刚刚开始学习Silverlight和WP7,所以我愿意在这里学习。。。