0

私はしばらく探していましたが、答えを見つけることができないようです..

コンピューターに接続されたバーコード スキャナーがあり、キーボード ウェッジとして機能します。スキャナーは、StartOfTransmission および EndofTransmission 文字を送信するように設定されているため、間にあるすべてのキーを処理し、何らかのアクションを実行する必要があります。

私のアプリケーションのシェルには、次のコードがあります...

private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    e.Handled = BarcodeScanner.Instance.ProcessTextInput(this, e.Text, e.Device, e.Timestamp);
}

これは、メイン ウィンドウまたはスペースを処理しないコントロール (ラベルなど) にフォーカスがある場合にうまく機能します。

私が遭遇した問題は、バーコード (私が制御していない) にスペースが含まれていることです。キーボード フォーカスが Textbox または Button にある場合、スペースはそのコントロールに記録され (つまり、ボタンの場合はクリックが発生します)、Shell.xaml の PreviewTextInput を通過しません。

私は次のいずれかをしたいと思います

  1. フォーカスのあるコントロールではなく、これらの文字をシェルでプレビューする方法
  2. StartOfTransmission を取得したら、シェルにフォーカスを移動し、EndOfTransmission の後、フォーカスをコントロールに戻します。
  3. または、私が気付いていない他の方法
4

1 に答える 1

1

私はうまくいくものを見つけました..しかし、私はそれが好きではありません。

私のShell.Xamlに、次を追加しました..

<TextBlock x:Name="lblBarcodeFocus" Focusable="True" Width="0" Height="0" />

次に、処理コードで「StartOfTransmission」を検出した場合は、このコントロールにフォーカスを設定し (フォーカスがあったことを思い出して)、処理が完了したら、フォーカスを元のコントロールに戻します。

これを行うにはもっと「エレガントな」方法が必要です...しかし、私は他の問題に移ることができます:-)

于 2013-09-12T19:22:54.497 に答える