C# Xaml.Controls.TextBox中字符的文本换行 环境

C# Xaml.Controls.TextBox中字符的文本换行 环境,c#,xaml,windows-8,windows-store-apps,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="Di

我正在开发一个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>

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

问题 我希望文本框将边界之外的所有字符换行。文字不必完全保留。当字符位于边界之外时,该字符应显示在新行上。此外,前一个字符应保留在前一行。应使用包括空格在内的所有字符执行此操作

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

图1:示例行为

当插入符号位于行的最后一个字符(图1.1)时,根据字符类型,输入字符时可能发生两种情况:

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

    当前行为 添加字符的单词仅包装到换行符中。见图1.2

    期望的行为 只有字符被换行,在图1.2中,字符“d” 只在第二行

  • 字符类型:空格

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

    期望的行为 空格被换行,如图1.2所示,字符“d” 只在第二行

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

编辑:
我可以通过将所有空格替换为非间断空格(“\u00A0”)将字符空格行为更改为非空格行为。现在我只需要第一部分的解决方案。

用非破坏性空间替换空格(见上文)似乎可以解决所有问题。使用不间断空格时,文本框将认为只有一个单词,因此无法“智能地”换行

编辑
这并不适用于所有字符,例如“example1>example2”仍然被视为两个单词“example1>”和“example2”。也许我可以在每个字符之间插入一个不可见的单词分隔符?

按照您的想法,您可以在每个字符后插入一个零宽度的空格。它是unicode符号200B()。我刚刚试过使用Windows窗体,但效果很好。

这很好,不过如果你想编辑文本框,性能会很差。