我想从右到左显示一些阿拉伯文字。所以我将流向设置为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ساعة)
请提出建议/解决方案。
答案 0 :(得分:5)
问题在于,当你的代码在XAML中“看起来”正确时,第一个字符是'('不是你想要的。你打算将它作为从右到左字符串的最后一个字符。意味着它应该是一个')'字符(但是从右到左的语言中它是镜像的)。
如果您希望XAML看起来正确并且WPF正确显示,则需要更正支具并使用特殊的unicode字符&amp; ux200F;标记字符,以便XAML理解最后一个')'仍然是从右到左。
在算法中,每个序列 串联强大的人物是 叫做“奔跑”。一个弱小的角色 位于两个强者之间 具有相同方向的字符 将继承他们的方向。弱者 位于两者之间的字符 强烈的人物与不同的 写作方向,将继承 主要语境的写作方向(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>
请注意,虽然看起来相同,但实际上是一个隐藏的字符,而结尾的括号是不同的。