wpf阿拉伯语文本无法正确显示

时间:2010-12-07 03:25:17

标签: c# wpf

我想从右到左显示一些阿拉伯文字。所以我将流向设置为RightToLeft。以下是我的计划:

<Grid x:Name="LayoutRoot" HorizontalAlignment="Left" VerticalAlignment="Top" >
    <TextBlock Margin="104,96,0,0" VerticalAlignment="Top" Height="Auto" Text="(وقت القاعدة الرئيسية 1 (بتوقيت 12 ساعة"  HorizontalAlignment="Left" FontSize="20" />
</Grid>

输出似乎不正确。右括号出现在不同的位置。输出结果为1وقتالقاعدةالرئيسية1(بتوقيت12ساعة)

请提出建议/解决方案。

1 个答案:

答案 0 :(得分:5)

问题在于,当你的代码在XAML中“看起来”正确时,第一个字符是'('不是你想要的。你打算将它作为从右到左字符串的最后一个字符。意味着它应该是一个')'字符(但是从右到左的语言中它是镜像的)。

如果您希望XAML看起来正确并且WPF正确显示,则需要更正支具并使用特殊的unicode字符&amp; ux200F;标记字符,以便XAML理解最后一个')'仍然是从右到左。

来自Wikipedia

  

在算法中,每个序列   串联强大的人物是   叫做“奔跑”。一个弱小的角色   位于两个强者之间   具有相同方向的字符   将继承他们的方向。弱者   位于两者之间的字符   强烈的人物与不同的   写作方向,将继承   主要语境的写作方向(in   角色将要的LTR文件   在RTL文档中,它成为LTR   将成为RTL)。如果“弱”   字符后跟另一个字符   “弱”字符,算法会   看看第一个邻居   “强壮”的性格。有时这个   导致无意的显示错误。   这些错误已得到纠正或   以“伪强”为止   字符。这种Unicode控制   字符称为标记。标记   (U + 200E从左到右标记(HTML:   LRM)或U + 200F   从右到左的标记(HTML:   RLM))将被插入一个   位置使封闭的弱者   字符继承了它的写作   方向。

尝试

<Grid x:Name="LayoutRoot" HorizontalAlignment="Left" VerticalAlignment="Top" >
    <TextBlock Margin="104,96,0,0" VerticalAlignment="Top" Height="Auto" Text="وقت القاعدة الرئيسية 1 (بتوقيت 12 ساعة)‏"  HorizontalAlignment="Left" FontSize="20" />
</Grid>

请注意,虽然看起来相同,但实际上是一个隐藏的字符,而结尾的括号是不同的。