Windows ストア アプリケーションで TextBox 内の文字列を操作する場合、改行文字が変換された結果が得られることがあります

現象

Windows ストア アプリケーションに TextBox コントロールを配置し、改行文字 (\r\n) を含む文字列を設定する場合を想定します。
このとき、SelectedText メソッドなどにより文字列操作を行うと、"\r\n" が "\r" に置き換えられた結果が得られます。
たとえば、以下のようなコードの実行を想定します。

TextBox tb1 = new TextBox(); tb1.AcceptsReturn = true; tb1.Text = "AAA" + Environment.NewLine + "BBB" + Environment.NewLine + "CCC"; tb1.SelectionStart = 0; tb1.SelectionLength = tb1.Text.Length; string s1 = tb1.Text; string s2 = tb1.SelectedText; int len = tb1.SelectedText.Length;

上記コードの実行時、以下の結果が得られることが想定されます。

s1 : "AAA\r\nBBB\r\nCCC" s2 : "AAA\r\nBBB\r\nCCC" len : 13

しかし、実際には、改行コード "\r\n" が "\r" のみで判断され、以下の結果となります。
s1 : "AAA\r\nBBB\r\nCCC" s2 : "AAA\rBBB\rCCC" len : 11

類似の現象は RichEditBox コントロールにおいて Document.Selection を基に処理を実行した場合にも発生します。

なお、Windows 8 デスクトップ アプリケーションでは本現象は発生せず、"\r\n" のまま処理された結果が得られます。



原因

ストア アプリケーションで利用される RichEditBox クラスの処理の一部で、改行コードを "\r\n" から "\r" に変換して処理する実装が含まれており、その影響によって本現象が発生します。
TextBox クラスの SelectedText メソッドなどの選択処理は、RichEditBox クラスの実装を使用しており、この影響を受けています。

回避策

SelectedText メソッドにより得られた文字列内に "\r" のみが含まれている場合には "\r\n" に置き換えて操作するような実装を行う必要があります。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
プロパティ

文書番号:2949063 - 最終更新日: 2016/09/29 - リビジョン: 1

Windows 8, Windows 8 Enterprise, Windows 8 Pro, Windows 8.1, Windows 8.1 Enterprise, Windows 8.1 Pro

フィードバック