我想从右到左显示一些阿拉伯文字.所以我将流向设置为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>
Run Code Online (Sandbox Code Playgroud)
输出似乎不正确.紧密括号出现在不同的位置.输出结果为وقتالقاعدةالرئيسية1(بتوقيت12ساعة)
请提出建议/解决方案.
问题是,当你的代码在XAML中"看起来"正确时,第一个字符是'('不是你想要的.你打算将它作为从右到左字符串的最后一个字符,这意味着它应该真的是一个')'字符(但从右到左的语言,它的镜像).
如果你希望你的XAML看起来正确而WPF正确显示你需要更正你的支架和一个特殊的unicode字符&ux200F; 标记字符,以便XAML理解最后一个')'仍然是从右到左.
来自维基百科
在算法中,每个连接的强字符序列称为"运行".位于具有相同方向的两个强字符之间的弱字符将继承其方向.位于具有不同书写方向的两个强字符之间的弱字符将继承主要上下文的书写方向(在LTR文档中,字符将变为LTR,在RTL文档中,它将变为RTL).如果"弱"字符后面跟着另一个"弱"字符,算法将查看第一个相邻的"强"字符.有时这会导致无意的显示错误.使用"伪强"字符可以纠正或阻止这些错误.这种Unicode控制字符称为标记.
尝试
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,虽然看起来相同,但实际上是一个隐藏的字符,而结尾的括号是不同的.