环境
我正在开发一个 Windows 应用商店应用程序我创建了一个带有自动换行功能的 TextBox
<ScrollViewer x:Name="ScrollView" Margin="0" Grid.Row="1" Background="Black" BorderThickness="2" BorderBrush="White" KeyDown="keyDown" VerticalScrollBarVisibility="Auto" HorizontalScrollMode="Disabled" ZoomMode="Disabled" IsHorizontalRailEnabled="False" IsHorizontalScrollChainingEnabled="False">
<Grid x:Name="Canvas" SizeChanged="setConsoleWidth">
<TextBox x:Name="textbox" Text="TextBox" Foreground="White" FontSize="24" FontFamily="Assets/inconsolata.ttf#inconsolata" AcceptsReturn="True" BorderThickness="0" Background="{x:Null}" SelectionChanged="handleCaret" Margin="0" IsTextPredictionEnabled="False" TextWrapping="Wrap"/>
<Rectangle x:Name="Caret" Stroke="Black" Fill="White" StrokeThickness="0" Margin="571,260,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="0" Height="0"/>
</Grid>
</ScrollViewer>
这个想法是您可以垂直滚动但不能在“文本框”中水平滚动。
问题
我希望文本框将边界外的所有字符换行。单词不必完整保存。当字符超出边界时,该字符应出现在新行上。此外,前一个字符应该留在上一行。这应该使用包括空格在内的所有字符来完成。
当前行为
当前的行为可以用下图来解释:
图 1:示例行为
当插入符号位于我们行的最后一个字符时(图 1.1),当您输入一个字符时,可能会发生两件事,具体取决于字符类型:
字符类型:
非空格(包括制表符)所有字符当前行为 您要附加字符的单词被简单地换行。见图 1.2。
期望 的行为 只有字符被换行,在图 1.2 的情况下,字符 'd' 只会在第二行。
字符类型:空格当前行为 空格和索引没有换行,只是在当前行继续(见图 1.3)。插入另一个空格不会使该空格换行(参见图 1.4,插入符号在屏幕外)。下一个非空格字符被换行,但空格字符将只保留在第一行。
期望 的行为 空格被换行,在图 1.2 的情况下,字符 'd' 只会在第二行。
如何实现这种期望的行为(该页面由 c# 支持)?
编辑:
通过用不间断空格(“\u00A0”)替换所有空格,我能够将字符空间行为更改为非空格行为。现在我只需要第一部分的解决方案。