タッチ スクリーンで使用される .NET 4 の WPF アプリケーションに取り組んでいます。組み込みの Windows OSK を入力に使用しようとしていますが、最後に残っている問題は、テキスト ボックスがフォーカスされるとすぐにキーボードが開くようにすることです。現在、テキスト ボックスがフォーカスされると、小さなキーボード アイコン (これは InputPanel アイコン) が表示され、ユーザーはそのアイコンをタップしてキーボードを開く必要があります。
アイコンのステップをスキップして、キーボードをずっと開いてフォーカスする方法はありますか? できれば、1 か所で設定またはコーディングでき、すべてのテキスト ボックスにグローバルに適用できるものが望ましいですか? また、アプリケーション スレッドの現在のカルチャ設定を使用する必要があります (既に実行されているようです)。
コントロール パネルの設定で、アイコンのステップをスキップできるものを見つけることができませんでした。TextInputPanel.CurrentInPlaceStateを使用するオンラインの例もいくつか見つけましたが、メイン ウィンドウのプレビュー フォーカスで TextInputPanel を開くコードを実装すると、COM INTEROP 例外が発生し続け、基本的に行き止まり (Microsoft.Ink.dllは相互運用 DLL です)。
デフォルトの CurrentInPlaceState を HoverTarget ではなく Expanded に変更できるレジストリ キーがある可能性はありますか? 私のネット検索では見つけられませんでした。
ありがとう、
ヴァレリー
編集:これは、メインウィンドウのコードビハインドに配置したコードと、取得し続ける例外メッセージです-そして、それが何を意味するのか、またはそれを修正する方法がわかりません(私のネット検索は失敗しました!)
protected override void OnPreviewGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
base.OnPreviewGotKeyboardFocus(e);
TextBox textbox = e.NewFocus as TextBox;
TextBox oldTextbox = e.OldFocus as TextBox;
if (oldTextbox != null && boxesToInputs.ContainsKey(oldTextbox))
{
TextInputPanel oldPanel = boxesToInputs[oldTextbox];
oldPanel.Dispose();
boxesToInputs.Remove(oldTextbox);
}
if (textbox != null)
{
// Make sure we've cleaned up old panels, just in case
if (boxesToInputs.ContainsKey(textbox))
{
boxesToInputs[textbox].Dispose();
boxesToInputs.Remove(textbox);
}
TextInputPanel newPanel = new TextInputPanel(((HwndSource)PresentationSource.FromDependencyObject(textbox)).Handle);
newPanel.DefaultInPlaceState = InPlaceState.Expanded;
newPanel.DefaultInputArea = PanelInputArea.Keyboard;
boxesToInputs[textbox] = newPanel;
}
}
そして、これは私のコードが TextInputPanel コンストラクターを呼び出すときに発生する例外メッセージです。
CLSID {F9B189D7-228B-4F2B-8650-B97F59E02C8C} を持つコンポーネントの COM クラス ファクトリの取得は、次のエラーが原因で失敗しました: 80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))
WPF アプリのプラットフォーム ターゲットが x86 であることを確認しました。Dependency Walker を実行したところ、使用していた Microsoft.Ink.dll が 64 ビットであり、2 つの遅延読み込み依存関係 (GPSVC.dll と IESHIMS.dll) が見つからないことがわかりました。Microsoft.Ink.dll の 32 ビット バージョンを見つけましたが、まだ同じエラーが発生し、Dependency Walker は同じことを言っています - GPSVC.dll と IESHIMS.dll がありません。
x64 をターゲットにすることはできません。不足している DLL をアプリケーション フォルダーに配置する必要はありません (それが機能する場合)。キーボードのヒントを取り除くだけで大変なことになるので、私が見逃している単純なものがあることを願っています...
アンマネージ/相互運用アセンブリの操作に関しては、私は少し初心者です...