我正在开发一个支持多种语言(包括阿拉伯语)的应用程序。我在输入值时在WPF文本框中观察到奇怪的行为,但奇怪的是,在Windows窗体文本框中工作正常。
我正在做的就是这个
在文本框中逐个输入以下字母 1 一个 2 Ĵ
(其中a和j表示任意两个阿拉伯字符)。
结果: Wpf文本框将值显示为1j2a Win表单文本框显示为j2a1。
由于阿拉伯语是从右到左,因此Win表单显示的值是正确的,但WPF的值是错误的。
如果我们将第一个字符键入为阿拉伯语,然后输入任何非阿拉伯字符,Wpf将显示正确的值。
另外,如果我将TextBox的FlowDirection设置为RightToLeft,那么WPF文本框工作正常。但这会使我的字符串向右移动,应用程序将出现对齐问题。
有没有人知道为什么WPF文本框在Windows窗体工作正常时显示不正确的值?
另外,如果我们将流向设置为RightToLeft,我们可以保持文本对齐吗?
答案 0 :(得分:0)
如果你使文本框flowdirection =" RightToLeft"
在Xaml
<TextBox Name="TxtBox1" FlowDirection="RightToLeft">
答案 1 :(得分:0)
另外,如果我将TextBox的FlowDirection设置为RightToLeft,那么WPF文本框工作正常。但这会使我的字符串向右移动,应用程序将出现对齐问题。
有点说你遇到的问题比基本对齐更大。 FlowDirection
的重点是允许那些非本地LeftToRight
读者在您的应用程序中使用本机UX。
向右移动的字符串应该是它应该是什么,这就是您的阿拉伯用户期望的。
有一个原因,不仅字符看起来不同,而且实际的文本流也是如此(这是该语言的用户所期望的)
如果您确定要将内容保持对齐,即使FlowDirection
被撤消,请应用Style.Trigger
进行相应操作,但请查看您的用户体验感受。
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="HorizontalContentAlignment"
Value="Left" />
<Style.Triggers>
<Trigger Property="FlowDirection"
Value="RightToLeft">
<!-- "Right" - HorizontalContentAlignment with FlowDirection="RightToLeft" is
the same end render visually as "Left" - HorizontalContentAlignment with
FlowDirection="LeftToRight" -->
<Setter Property="HorizontalContentAlignment"
Value="Right" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<强>更新强>
由于OP现在声明控件实际上是TextBlock
上面的Style
看起来像:
<TextBlock>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextAlignment"
Value="Left" />
<Style.Triggers>
<Trigger Property="FlowDirection"
Value="RightToLeft">
<Setter Property="TextAlignment"
Value="Right" />
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>