我正在开发一个Windows应用商店应用我创建了一个带有wordwrapping的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”)替换所有空格,我能够将字符空间行为更改为非空格行为。现在我只需要第一部分的解决方案。
答案 0 :(得分:1)
根据您的想法,您可以在每个字符后插入零宽度空格。它是unicode符号200B(http://en.wikipedia.org/wiki/Zero-width_space)。我刚刚尝试使用Windows Forms,它可以运行。
答案 1 :(得分:0)
用非破坏空间替换空格(见上文)似乎可以解决所有问题。对于不间断的空格,文本框会认为只有一个单词,因此无法“智能地”包装。
这对所有字符都不起作用,例如'example1&gt; example2'仍被视为两个单词'example1&gt;'和'example2'。也许我可以在每个角色之间插入一个不可见的单词分隔符?