Почему 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
обрезает конечные пробелы? Однако он отлично работает, когда я даю ведущие пробелы.
Ответы
Ответ 1
Похоже, что xml:space="preserve"
должен сделать трюк (см. Сохранение пробелов в XAML), но это, похоже, не работает в Приложение Windows Store (оно работает в WPF).
Если вы используете неразрывный пробел  
, он работает
<TextBlock Text="6 or more characters, at least one letter and a number,       " ....
Я полагаю, вы могли бы попытаться создать конвертер в свойстве 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>
Но он также добавляет дополнительное пространство между прогонами в дополнение к тем, которые вы указываете.