C#WPF将英文数字转换为阿拉伯数字

我需要为我正在处理的应用程序显示阿拉伯数字字符的英文双。

这是一个包含double的示例类:

public class Class1 { private double someDouble = 0.874; public double SomeDouble { get { return someDouble; } } } 

我想将SomeDouble的值转换为运行时以阿拉伯数字字符显示的百分比。 这是我用过的一些快速XAML测试:

         

和我的测试值转换器,DoubleValueConverter:

 public class DoubleValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { double valueAsDouble = (double)value; return valueAsDouble.ToString("P1", culture); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

在窗口后面的代码中,我将Language属性设置为当前文化“ar-SA”。 这似乎是一个要求,因为这会更改DoubleValueConverter中的culture参数的值。

 public partial class Window1 : Window { public Window1() { Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name); InitializeComponent(); } } 

此转换器提供正确的格式化属性,即小数分隔符,但我需要将这些数字输出为阿拉伯字符而不是“87,4%”。

有没有人有一个简单的方法来做这个建议?

我找到了一个非常快速简便的解决方案。 我发现阿拉伯字符在数字中的使用是上下文的; 即数字形状取决于同一输出中的先前文本。

示例:输入“1234”作为TextBlock元素中的文本只会以英文形状显示。 但是,如果1234之前有一些阿拉伯语文本(比如说“abcde”),例如شلاؤيث1234。 在这个例子中,前四个数字将是字符“1234”的阿拉伯形状。 (注意:这似乎不适用于本网站 – 在文本框中正确显示,但预览显示数字的英文形状)

有关更多信息,请参阅以下链接

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.digitsubstitution.aspx http://msdn.microsoft.com/en-us/library/system.globalization.digitshapes.aspx

通过查看第二个链接,我想要的显而易见的选择是NativeNational,但是由于我们的CurrentCulture是由操作系统自动设置的,因此CurrentCulture实例是只读的。

通过这个,我只是创建了一个新的CultureInfo对象,并将DigitSubstitution更改为DigitShapes.NativeNational:

  CultureInfo ci = CultureInfo.CreateSpecificCulture(Thread.CurrentThread.CurrentCulture.Name); ci.NumberFormat.DigitSubstitution = DigitShapes.NativeNational; Thread.CurrentThread.CurrentCulture = ci;