問題タブ [textcompositionmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
5646 参照

wpf - WPF TextCompositionManager イベントのヘルプ

これに関するドキュメントはかなり粗雑です。TextCompositionManager経由でアクセスされるテキスト入力を監視および制御するためにフックできるイベントが多数あります。カードのスワイプ データを取得するようなことをしたい場合は、ここで行います。

テキスト入力に関する 3 つのイベントがあります: TextInputTextStart、およびTextUpdate。各イベントには 2 つのバージョンがあります。1 つはイベントがトンネリングする場合(ウィンドウからフォーカスのあるコントロールに移動する) で、もう 1 つはバブリングする場合(フォーカスされた UI 要素からウィンドウに移動する) です。

トンネリング:

  • PreviewTextInputEvent
  • PreviewTextInputStartEvent
  • PreviewTextInputUpdateEvent

バブリング:

  • TextInputEvent
  • TextInputStartEvent
  • TextInputUpdateEvent

そのため、TextCompositionManager にフックする論理ツリーの場所に応じて、これらのテキスト イベントをイベントのフォーカスに到達する前に変更したり、後で表示したりすることができます。これはすべて、ドキュメントと使用中の非常にシンプルで明確です。


TL;DR

3 つのイベントの適切な定義が見つかりません。受け入れられる答えは、3 つのイベント (TextInput、TextInputStart、および TextInputUpdate) を定義するだけでなく、それらを比較対照するものです。回答の共有はありません。情報源を参照してください。ウィキペディアは立ち入り禁止です。あなたの成績の 25% はこれに依存します。

0 投票する
1 に答える
4191 参照

wpf - 入力コントロールがTextCompositionManagerからスペース文字を盗むのを防ぐにはどうすればよいですか?

この質問に関連しています(ただし、重複ではありません!): WPFTextCompositionManagerイベントのヘルプ

TextCompositionManagerを使用しているときに、TextBoxなどの入力コントロールにフォーカスがある場合、TextBoxがスペース文字を操作する前に、スペース文字を「盗む」という問題が発生します。

たとえば、次のコードがあります。

Window1は次のようになります。

ここで、このアプリケーションを実行してすぐに「I haet thieveing bastards」と入力すると、TextBlockに「Ihaet thieveing bastards」というテキストが含まれ、テキストボックスは空になります。

ただし、テキストボックスにフォーカスを合わせる場合(つまり、テキストボックスにキーボードフォーカスがある場合)、上記の行を入力すると、テキストブロックに「Ihaetthieveingbastards」というテキストが含まれ、テキストボックスに「」(3つのスペース)というテキストが含まれます。


2つの質問があります:
1)TextCompositionManagerによって提供される機能だけでこれが発生するのを防ぐことはできますか?
2)そうでない場合は、テキスト入力スタックにプラグインして、WPFアプリケーション内のテキスト入力を完全に制御できるようにします(p /呼び出しについて考える場合でもマイナスの点)(考えただけでマイナスの点が追加されます) ?


アップデート

私は、スペースに対してのみInputManagerからのトンネリングKeyDownイベントを処理するハッキーな回避策を使用しています。この方法は非常に扱いにくく、非効率的で、基本的に悪臭を放ちます。まだより良い方法を探しています。

0 投票する
2 に答える
5413 参照

wpf - PreviewKeyDown で受け取ったキーを文字列に変換する

ウィンドウで PreviewKeyDown イベントを使用して、バーコード スキャナーからすべてのキーを受け取ります。KeyEventArgs は列挙型であり、実際の文字列は提供されません。一部のキーはコントロール自体によって処理される可能性があり、TextInput イベントにバブルアップしない可能性があるため、TextInput を使用したくありません。

PreviewKeyDown で取得したキーを実際の文字列に変換する方法を探しています。InputManager、TextCompositionManagerなどを見ましたが、キーのリストを与える方法が見つからず、文字列で返されます。TextCompositionManager または何かが、これらのキーを TextInput で利用可能な文字列に変換する必要があります。

0 投票する
0 に答える
335 参照

c# - 仮想キーに対応する文字を決定します (アジア IME を使用)。。ネット

仮想キーまたは仮想キーの組み合わせ (System.Windows.Input.Key またはSystem.Windows.Input.KeyGesture ) を指定して文字 (文字または文字列) を取得するにはどうすればよいですか? アジアの IME を使用しており、ユーザーがキーボードでそのキーを押した場合にテキスト ボックスに表示されるアジア文字または部分文字を特定したいと考えています。

P/Invoking ToUnicodeEx を試してみましたが、アジア言語ではうまくいかないようです。TextCompositionManager を使用してテキスト作成イベントのシミュレーションも試しましたが、作成するテキストがわかっている場合を除き、機能しないようです。

この関数は、最終的に WPF アプリケーションで使用する必要があります。