この質問に関連しています(ただし、重複ではありません!): WPFTextCompositionManagerイベントのヘルプ
TextCompositionManagerを使用しているときに、TextBoxなどの入力コントロールにフォーカスがある場合、TextBoxがスペース文字を操作する前に、スペース文字を「盗む」という問題が発生します。
たとえば、次のコードがあります。
public Window1()
{
TextCompositionManager.AddPreviewTextInputStartHandler
(this, PreviewTextInputStartHandler);
}
private void PreviewTextInputHandler(object sender, TextCompositionEventArgs e)
{
CaptureTextBlock.Text += e.Text;
e.Handled = true;
}
Window1は次のようになります。
<!--standard window crap above here-->
<StackPanel>
<TextBlock Name="CaptureTextBlock" />
<TextBox Name="ThievingBastard" />
</StackPanel>
<!-- snip -->
ここで、このアプリケーションを実行してすぐに「I haet thieveing bastards」と入力すると、TextBlockに「Ihaet thieveing bastards」というテキストが含まれ、テキストボックスは空になります。
ただし、テキストボックスにフォーカスを合わせる場合(つまり、テキストボックスにキーボードフォーカスがある場合)、上記の行を入力すると、テキストブロックに「Ihaetthieveingbastards」というテキストが含まれ、テキストボックスに「」(3つのスペース)というテキストが含まれます。
2つの質問があります:
1)TextCompositionManagerによって提供される機能だけでこれが発生するのを防ぐことはできますか?
2)そうでない場合は、テキスト入力スタックにプラグインして、WPFアプリケーション内のテキスト入力を完全に制御できるようにします(p /呼び出しについて考える場合でもマイナスの点)(考えただけでマイナスの点が追加されます) ?
アップデート
私は、スペースに対してのみInputManagerからのトンネリングKeyDownイベントを処理するハッキーな回避策を使用しています。この方法は非常に扱いにくく、非効率的で、基本的に悪臭を放ちます。まだより良い方法を探しています。