2

環境

私は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")に置き換えることで、文字スペースの動作を非スペースの動作に変更することができました。今、私は最初の部分の解決策だけが必要です。

4

2 に答える 2

0

スペースを非ブレークスペース(上記を参照)に置き換えると、すべてが修正されるようです。改行しないスペースを使用すると、テキストボックスは単語が1つだけであると見なすため、「インテリジェントに」折り返すことはできません。

編集

これはすべての文字で機能するわけではありません。たとえば、「example1>example2」は引き続き「example1>」と「example2」の2つの単語として表示されます。たぶん、すべての文字の間に非表示の単語区切り文字を挿入できますか?

于 2013-01-05T14:01:05.170 に答える
0

あなたのアイデアに従って、各文字の後にゼロ幅のスペースを挿入できます。Unicode シンボル 200B ( http://en.wikipedia.org/wiki/Zero-width_space ) です。Windowsフォームで試してみたところ、動作します。

于 2013-01-06T13:47:32.137 に答える