2013-07-04 3 views
0

Я работаю над приложением, которое поддерживает многие языки, включая арабский. Я наблюдаю странное поведение в текстовом поле WPF при вводе значений, но, как ни странно, то же самое отлично работает в текстовом поле Windows Form.Текстовое поле WPF Направление потока с арабским языком

Все, что я делаю это

  1. Создайте текстовое поле и держать это направление потока к значению по умолчанию, который LeftToRight
  2. изменить язык приложения на арабском языке.
  3. Введите следующую букву по одному в текстовом поле J

    (где а и J обозначает любые два символа арабский).

Результат: Wpf Текстовое поле показывает значение как 1j2a Хотя Win формирует текстовое поле отображает его j2a1.

Поскольку арабский справа налево, значение, отображаемое формой Win, является правильным, но значение WPF неверно.

Wpf отображает правильное значение, если мы наберем первый символ как арабский, а затем введите любой неарабский символ.

Кроме того, если я устанавливаю FlowDirection из TextBox в RightToLeft, тогда текстовое поле WPF отлично работает. Но это заставит мою строку двигаться вправо, и приложение будет иметь проблемы с выравниванием.

Есть ли у кого-нибудь идеи о том, почему текстовое поле WPF показывает неправильное значение, когда формы Windows работают нормально?

Кроме того, можем ли мы сохранить выравнивание текста влево, если мы установим направление потока как RightToLeft?

+0

Что делать, если у сделать текстовое поле FlowDirection = "RightToLeft" – Vishal

ответ

0

Кроме того, если я устанавливаю FlowDirection из TextBox в RightToLeft, то WPF текстовое поле работает отлично. Но это заставит мою строку двигаться вправо, и приложение будет иметь проблемы с выравниванием.

Этот тип говорит, что у вас большие проблемы, чем базовое выравнивание. Весь смысл FlowDirection состоит в том, чтобы позволить тем не родным LeftToRight читателям иметь собственный UX в вашем приложении.

Строка, перемещающаяся вправо, является тем, чем она должна быть, и этого ожидают ваши арабские пользователи.

Microsoft Home Page in en-US

Same page in ar-iq

Существует причина, почему не только персонажи выглядят по-разному, но сам текст потока, а также (это то, что пользователи этого языка было бы ожидать)

Если вы» убедитесь, что вы хотите сохранить выравнивание содержимого слева, даже если FlowDirection отменено, примените Style.Trigger, чтобы сделать это соответственно, но посмотрите, как ваш UX чувствует.

<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> 

Update:

В ОП в настоящее время говорится управления на самом деле 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> 
+0

Спасибо, но проблема с вышеупомянутым решением заключается в том, что он не будет работать на TextBlock, так как он не имеет свойства HorizontalContentAlignment. И мы не можем использовать Label, поскольку он не предоставляет функцию TextWrapping. Есть ли способ выровнять текст влево в текстовом блоке, сохраняя направление потока как справа налево? –

+0

@SumitBakshi Ну, как я могу предположить, что это «TextBlock», когда ваш заголовок вопроса говорит «WPF ** Textbox ** ...». На этой странице только «TextBlock» указан в ваших комментариях, а не в вашем вопросе. Вам нужно будет уточнить ваши вопросы. Теперь для «TextBlock» эквивалент для «HorizontalContentAlignment» - это просто «TextAlignment», поэтому просто замените «HorizontalContentAlignment» на «TextAlignment». – Viv

+0

Извините, но мне нужно было для обоих. Кажется, что установка TextAlignment = Right для текстового блока устраняет эту проблему. Спасибо за помощь. –

0

Что делать, если у сделать текстовое поле FlowDirection = "RightToLeft"

в Xaml

<TextBox Name="TxtBox1" FlowDirection="RightToLeft"> 
+0

Это будет перемещать текст в нужную сторону, которую мы не хотим. Настройка горизонтального выравнивания содержимого также не является вариантом, так как после ввода нам нужно отобразить текст в TextBlock. –

Смежные вопросы