Подтвердить что ты не робот

Почему TextBlock обрезает конечные пробелы из текста?

Вот мой TextBlock s

<StackPanel Orientation="Horizontal" Margin="0,3,0,0">
    <TextBlock Text="6 or more characters, at least one letter and a number,   "  FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/>
    <TextBlock Text="no symbols"  FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/>
</StackPanel>

И вот результат (снятие экрана) enter image description here

Почему TextBlock обрезает конечные пробелы? Однако он отлично работает, когда я даю ведущие пробелы.

4b9b3361

Ответ 1

Похоже, что xml:space="preserve" должен сделать трюк (см. Сохранение пробелов в XAML), но это, похоже, не работает в Приложение Windows Store (оно работает в WPF).

Если вы используете неразрывный пробел &#160;, он работает

 <TextBlock Text="6 or more characters, at least one letter and a number,&#160;&#160;&#160;&#160;&#160;&#160;&#160;"  ....

Я полагаю, вы могли бы попытаться создать конвертер в свойстве Text, чтобы проверять завершающие пробелы и заменять его неразрывными пробелами - предполагая, что усечение, которое происходит, происходит не слишком рано.

Ответ 2

Решено с помощью <Run /> в <TextBlock />..

<StackPanel Orientation="Horizontal" Margin="0,3,0,0">
    <TextBlock FontFamily="Segoe UI" Foreground="#000000" FontSize="13">
        <Run Text="6 or more characters, at least one letter and a number, " />
        <Run Text="no symbols" />
    </TextBlock>
</StackPanel>

И перенос слов все еще работает

<StackPanel Orientation="Horizontal" Margin="0,3,0,0">
    <TextBlock FontFamily="Segoe UI" Foreground="#000000" FontSize="13" 
        Width="200" TextWrapping="Wrap">
        <Run Text="6 or more characters, at least one letter and a number, " />
        <Run Text="no symbols" />
    </TextBlock>
</StackPanel>

Я бы без труда воспользовался решением Jim (# 160;), если обертка не была проблемой.

В вашем уме подумайте о том, как HTML обрабатывает и сохраняет пробелы. Это также то, как XAML обрабатывает и сохраняет пробелы. Вы, конечно, подумали бы, что внутри TextBlock это будет более буквально обработано, да? Ну, это то, что есть. По крайней мере, есть решение.

Ответ 3

Попробуйте использовать xml:space="preserve":

<StackPanel Orientation="Horizontal" Margin="0,3,0,0">
    <TextBlock xml:space="preserve" Text="6 or more characters, at least one letter and a number,   "  FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/>
    <TextBlock xml:space="preserve" Text="no symbols"  FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/>
</StackPanel>

Ответ 4

Я нашел другое решение! \u+A0 работает, когда вы также устанавливаете IsTextSelectionEnabled.

Я не знаю, почему это было бы, и это был полный сюрприз (я добавил поле, потому что я только что обнаружил его, а также работал над моей "Почему мой текст обрезается в проблемах Universal Apps?" ).

Также U+205F (среднее математическое пространство) также работает в сочетании с IsTextSelectionEnabled.

Ответ 5

RichTextBlock, похоже, сохраняет как ведущее, так и конечное пустое пространство (в WP 8.1 WinRT):

<RichTextBlock>
 <RichTextBlock.Blocks>
  <Paragraph >
   <Paragraph.Inlines>
    <Run Text="trailing " /><Run Text="bbb" /><Run Text=" leading" />
   </Paragraph.Inlines>
  </Paragraph>
 </RichTextBlock.Blocks>
</RichTextBlock>

Но он также добавляет дополнительное пространство между прогонами в дополнение к тем, которые вы указываете.