2016-10-07 10 views
1

私は現在、UWPアプリケーションで使用するタッチキーボードを構築しようとしています。私が思いついた解決策の1つは、仲介コンポーネントを使用してSendKeysファンクションをボタンで呼び出すことでした(IsTabStopをfalseに設定し、ClickModeを押して、入力コントロールからのフォーカスの損失を防ぐ)。これまでのところ、すべてが動作します(問題なくTextBoxをテストしました)。WebView内のHTML要素に入力フォーカスを失わないようにするにはどうすればよいですか?

問題:WebViewコントロールを使用していくつかの問題が発生しました。ボタンをクリックすると、WebViewはフォーカスを期待どおりに保持します。ただし、DOM要素(HTMLの<input>マークアップなど)は入力フォーカスを失います(視覚的に選択されたままです)。

私はウェブビューの焦点をリセットすることでこれを解決する方法を見つけました。それは別の問題を明らかにした。入力要素がフォーカスされるたびに、コンテンツ(文字列)のすべてを選択するように入力要素が設定されているとします。次に、自分のボタンの1つをクリックするたびに、コンテンツが選択され、WebViewに送信された新しい文字に置き換えられます。

私の質問は、XAMLボタンをクリックしたときにDOMオブジェクトのフォーカスを失うことを避ける方法はありますか?

NB:私はInputPaneについて知っていますが、このアプリケーションでは使用できません(クライアント側の制限のため)。また、何か不明な点がある場合はお知らせください。できるだけ早く編集します。

NB2:WebViewで表示されるページのソースコードには絶対にアクセスできません。また、特定の要素の存在を頼りにすることはできません。

答えて

0

このシナリオでは、記念日の更新で新しいプロパティFrameworkElement.AllowFocusOnInteractionが導入されました。ボタンでfalseに設定すると、ボタンがクリックされたときにフォーカスが失われます。フォーカスはWebViewに残り、選択がクリアされるべきではありません(そうでない場合は、何か他のこともあります)。

これ以前には、良い解決策はありませんでした。私が目にしたことは、Button.ClickハンドラのWebView.Focus()を呼び出してフォーカスを返し、次にClickハンドラに進む前にフォーカスイベントが完了するのを待つことです。

Anniversary Updateより前のシステムをターゲットにする必要がある場合は、AllowFocusOnInteractionをApiInformation.IsPropertyPresentで存在することを確認してからコードから設定する必要があります。これをXamlで直接行うことはできませんが、Xamlから呼び出すことができる添付プロパティでチェックをラップすることができます。サンプルコードについては、私のブログエントリComboBox on a Flyout attached to an AppBarButton loses mouse input on 1607を参照してください。

+0

ご協力いただきありがとうございます。このプロパティの動作は、IsTabStopに非常に近いようです(少なくとも、両方で同じ結果が得られます)。 Button.ClickハンドラのFocus()呼び出しについては、これまでの説明とほとんど同じですが、入力要素がWebページでどのように処理されるかによっていくつかの問題が発生します。 私はあなたのソリューションを試しましたが、残念ながらWebView自体の焦点は問題ではないようです。フォーカスがWebViewに保持されていても(実際にどのように処理されているかはわかりませんが)、コントロールが入力フォーカスを失うようなクリックハンドラがあるようです。 – Dragosh

関連する問題