IValueConverter在Windows Phone 7中出现错误的文化

Hin*_*nek 7 .net c# globalization cultureinfo windows-phone-7

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

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        // ...
    }

    // ... 
}
Run Code Online (Sandbox Code Playgroud)

......并像这样使用它......

<TextBlock Text="{Binding SomeField, Converter={StaticResource MyConverter}, ConverterParameter=SomeParameter}" <!-- ... --> />
Run Code Online (Sandbox Code Playgroud)

我的问题:argumentConvert方法的文化总是"en-US",即使我改变Windows Phone设备(或模拟器)的文化对德国德国说,这个culture论点仍然是英语.

Cla*_*sen 6

不是错误,预期的行为.请参阅MSConnect上的这篇文章WPF Binding默认使用错误的CurrentCulture.

解决方案是将Language您的属性设置PhoneApplicationPage为CurrentCulture,如下所示:

Language = XmlLanguage.GetLanguage(
    Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName);
Run Code Online (Sandbox Code Playgroud)

或者使用Language属性在XAML中指定文化,如下所示:

<TextBlock Language="de-DE" Text="..." />
Run Code Online (Sandbox Code Playgroud)

或者PhoneApplicationPage自己

<phone:PhoneApplicationPage Language="de-DE" ...
Run Code Online (Sandbox Code Playgroud)

但更好的解决方案是不要有一个取决于culture参数的值转换器.

编辑:我在博客上写了一个替代解决方案:ValueConverter中的DateTime格式