Windows FormアプリケーションからWPFのWindowを開いた際にTextBoxで半角入力ができない、カーソルが効かない
過去に作成したWindows Formアプリケーションの機能アップをすべく、その部分はWPFで作成してます。
さて、問題にぶつかりました。Windows FormアプリケーションからWPFのWindowを開いた際に、そのWindowのTextBoxではなぜか半角入力を受け付けてくれません。
全角入力は問題なくできます。
いろいろ悩みましたが、答えはググればすぐでしたorz
xamlのテキストボックス(System.Windows.Controls.TextBox)で半角英数が入力できない
https://social.msdn.microsoft.com/Forums/sqlserver/ja-JP/bd20e0f8-777b-4aad-8d87-47f813aef715/xaml123981248612461124731248812508124831246312473systemwindowscontrols?forum=netfxgeneralja
このページで紹介してあるリンク先の以下のページに解決策があります。
Windows Form opening WPF window
https://social.msdn.microsoft.com/Forums/vstudio/en-US/442782b1-00a1-4e2e-9cc6-ae99b6699126/windows-form-opening-wpf-window?forum=wpf
簡単に言えば、WindowをShow()した後に、以下のメソッドを実行するだけで良い。
System.Windows.Threading.Dispatcher.Run();
もしくは上記の代わりに、以下でも良い。
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(window); window.Show();
EnableModelessKeyboardInteropを実行するには、 WindowsFormsIntegration.dll を参照設定する必要がある。
(参考)
WPF Window を Windows フォームから起動した場合の落とし穴
https://hilapon.hatenadiary.org/entry/20100618/1276855276
まぁ、WindowsフォームとWPFは仕組みが全く違いますから仕方ないですわねぇ・・・
【追記 2020-03-12】
System.Windows.Threading.Dispatcher.Run();
が、お勧めということが分かった。
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(window); window.Show();
だと、この開いた画面からさらに別のWPFの画面を開くと、同様の症状が出てしまう。