C# IValueConverter在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

我在Windows Phone 7中创建了一个值转换器

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,所以我愿意在这里学习。。。