c# - Xaml.Controls.TextBox 中字符的文本换行

标签 c# xaml windows-8 windows-store-apps

环境

我正在开发一个 Windows 应用商店应用程序,我创建了一个带有自动换行的文本框

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

想法是您可以在“文本框”中垂直滚动但不能水平滚动。

问题

我希望文本框将边界外的所有字符换行。不必完全保留单词。当一个字符在边界之外时,该字符应该出现在一个新行上。此外,前一个字符应该留在上一行。这应该对包括空格在内的所有字符完成。

当前行为

当前行为可以用下图解释:

Example behavior 图 1:示例行为

当插入符号位于我们行的最后一个字符时(图 1.1),当您输入一个字符时可能会发生两种情况,具体取决于字符类型:

  • 字符类型:非空格(包括制表符)所有字符

    当前行为 您要附加字符的单词只是换行。见图1.2。

    期望的行为 只有字符被换行,在图 1.2 的情况下,字符 'd' 只会在第二行。

  • 字符类型:空格

    当前行为 空格和索引没有换行,只是在当前行继续(见图 1.3)。插入另一个空格不会使该空格换行(见图 1.4,插入符在屏幕外)。下一个非空格字符换行,但空格字符将留在第一行。

    期望的行为 空格被换行,在图 1.2 的情况下,字符 'd' 只会在第二行。

<罢工>

<罢工> 如何实现这种期望的行为(该页面由 c# 支持)?

编辑:

通过将所有空格替换为不间断空格 ("\u00A0"),我能够将字符空格行为更改为非空格行为。现在我只需要第一部分的解决方案。

最佳答案

按照您的想法,您可以在每个字符后插入一个零宽度空格。它是 unicode 符号 200B ( http://en.wikipedia.org/wiki/Zero-width_space )。我刚刚尝试使用 Windows 窗体,它可以正常工作。

关于c# - Xaml.Controls.TextBox 中字符的文本换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171215/

相关文章:

c# - 如何在关闭前暂停cmd?

c# - 如何在 WPF 中订阅上下文菜单关闭事件?

c# - UWP 数据绑定(bind) : How to set button command to parent DataContext inside DataTemplate

c# - 在 WinRT 中膨胀压缩字节数组

c# - 使用相同的 HttpClient 从 MVC Controller 调用 Web API

C#:是否有任何标准编译标志可以让我检测我是针对 x86 还是 x64 进行编译?

c# - 存储 Windows Phone 的设置

c# - 以编程方式设置 TextBlock 的样式

windows-8 - 如何在后台任务中精确测量 CPU 使用率?

powershell - 获取所有打开的资源管理器窗口的报告