2

ユーザーがバックスペース キーを押すたびに現在のページを前のページに設定する Safari Web ブラウザーの動作を処理する方法を知っている人はいますか? 現在、Mac OSX Lion 10.7.2 と Silverlight アプリケーションで、ユーザーがバックスペース/Delete キーを使用してフィールドを修正しようとすると、この問題が発生します。

4

1 に答える 1

1

私も過去にこの問題を抱えていました。私は解決策を考え出すのに1週間ほど費やしましたが、最終的にこの問題を回避する最良の方法は次のとおりです(いわば「修正」は見つかりませんでした):

  1. Javascript を使用して、すべてのバックスペース キー ダウン イベントを一時停止します。バックスペース イベントが Silverlight コンテナーに到達することを許可しないでください。これは、Silverlight が前のページに移動しないことを意味しますが、テキスト フィールド内のテキストを削除することもできなくなります! ポイント 2 では、これを回避する方法について説明します。

  2. KeyUpイベント ハンドラーをRootVisualSilverlight コントロールの にアタッチします。KeyEventArgs' 元のソースが TextField で、キー自体が だったKey.Back場合、テキスト ボックス内の一部のテキストを手動で削除する必要があります。これを行うには、TextBoxSelectionStartSelectionLengthプロパティを調べます。SelectionStart削除する場所と、削除するSelectionLength文字数を指定します。最後に、カーソルが現在あるべき正しい位置を特定する必要があります。SelectionStartこれは、プロパティの値と等しくなければなりません。

このアプローチには欠陥があります。KeyUpイベントを手動でリッスンする必要があるためKey.Back KeyUp、バックスペース キーが離されたときにのみイベントが発生します。これは、Safari を使用していてバックスペースを押したままにすると、1 文字だけが削除されることを意味します。別の文字を削除するには、バックスペースを解放してもう一度押す必要があります。これは、前のページを表示するか、バックスペースをまったく処理しないという代替手段があることを考えると、私の意見では支払うべき小さな代償です!

これはすべて Mac/Safari 固有のものである可能性があることに注意してください。を使用してブラウザーの種類を検索し、ブラウザーが Safari の場合にHtmlPage.BrowserInformation.UserAgentのみハンドラーをアタッチできます。RootVisual_KeyUpSafari の JavaScript でもバックスペース イベントのみを一時停止すると、Mac/Safari でのみ効果があり、他のすべてのブラウザのデフォルト機能が維持されます。

幸運を!お役に立てれば!

于 2012-04-10T11:20:16.907 に答える