TextBoxをベースにした入力フィルタを使用してテキストコントロールを作成しています。TextChangingハンドラでSelectionStartを変更する
主なアイデアは、TextChangingイベントを処理し、正しいTextおよびSelectionStart値を設定することです。
これはWindows 10 Creators Updateまで機能しました。 TextChangingハンドラでSelectionStartを変更すると、UIのキャレットの位置が正しく表示されますが、次の文字は古い場所に移動します。
私は今すぐコードを共有することはできませんが、各TextChangingコールで任意の文字を追加することで再現できます(この文字の後にSelectionStartを設定する)。
Microsoftに下位互換性が壊れていますか?私は間違った何かをしましたか?
UPD:
はasync void OnTextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
var newText = HandleText(Text);
var newSelectionStart = HandleTextDiff(newText, Text);
Text = newText;
await Task.Yield();
SelectionStart = newSelectionStart;
}
Task.Yieldが制御内部割り当て後に非同期で実行するようにしたselectionStartの割り当てを行いますので、私は汚い回避策を見つけました。
キャレットが点滅することがありますが、私が見つけることができる唯一の解決策であるため、これは非常に汚れて醜いです。
を使用するかもしれません0
にSelectionLengthを設定してみる必要があります。 –
@LeiYangお願いします。 – llvk