環境
私は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)、文字を入力すると、文字の種類に応じて2つのことが起こります。
文字タイプ:
非スペース(タブを含む)すべての文字現在の動作 文字を追加する単語は、改行にラップされるだけです。図1.2を参照してください。
望ましい動作 文字のみが改行にラップされます。図1.2の場合、文字「d」は2行目にのみ表示されます。
文字タイプ:スペース現在の動作 スペースとインデックスはラップされず、現在の行に続くだけです(図1.3を参照)。別のスペースを挿入しても、そのスペースは折り返されません(図1.4を参照、カレットは画面外にあります)。次の非スペース文字は改行に折り返されますが、スペース文字は最初の行にとどまります。
望ましい動作 スペースは改行にラップされます。図1.2の場合、文字「d」は2行目にのみ表示されます。
この望ましい動作をどのように達成しますか(ページはc#でバックアップされています)?
編集:
すべてのスペースを改行なしスペース( "\ u00A0")に置き換えることで、文字スペースの動作を非スペースの動作に変更することができました。今、私は最初の部分の解決策だけが必要です。