前提
WPF C#で richTextBox に表示された文字の一部を色を変えるとそこを跨いだ
キャレット位置が2Byteほどずれる(色を変えた部分がカーソルカウントで)
というか色付きの長さが長くなっている計算になるようです。キャレットは選択表示です。
色を変えない場合は文字列数通りです。
そんなものでしょうか?
何か間違っているのでしょうか?
よろしくお願いいたします。
実現したいこと
表示された文字列に部分的に違う色があっても文字数とキャレット位置を
合わせたいです。行頭から1行選択しながら次次と行を変えたい。
具体的には(3)のSelectText(8, 5)で文字列"67890"が選択状態になるようにしたい
実際の以下のコードでは5の次(改行?)~ 8までが選択されます。
発生している問題・エラーメッセージ
文字列一部に色を付けるとキャレット位置が計算通りにならない
該当のソースコード
// richTB は richiTextBoxです // 呼び出し側 Run runFirst = new Run(); runFirst.Text = "012345\r\n67890"; Paragraph paragraph = new Paragraph(); paragraph.Inlines.Add(runFirst); FlowDocument document = new FlowDocument(); document.Blocks.Add(paragraph); richTB.Document = document; // ここまでは文字列表示 SelectText(0,5);//文字列選択 (1) // 選択範囲の文字列の色を変える (2) var textRange = richTB.Selection; textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red); SelectText(8, 5);//文字列再選択 (3) } // ここまで呼び出し側 // 文字列選択メソッド private void SelectText(int start, int length) { richTB.Focus(); TextRange textRange = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd); TextPointer pointerStart = textRange.Start.GetPositionAtOffset(start, LogicalDirection.Forward); TextPointer pointerEnd = textRange.Start.GetPositionAtOffset(start + length, LogicalDirection.Forward); richTB.Selection.Select(pointerStart, pointerEnd); } コード
試したこと
richTextBox はあまり詳しくないので、いろんなサイトからコピペして
選択の範囲を変えて文字をカウントしながら試しました。
補足情報(FW/ツールのバージョンなど)
Visual Studio Community 2022 (64 ビット)
プロジェクトは.NET Framework 4.7.2

回答1件
あなたの回答
tips
プレビュー