既存の Windows フォーム/MFC アプリケーション エンジン (Rhino 3D) 内で使用される WPF の UI コントロールを開発しています。
アプリケーション エンジンは、基本的にエンジン インターフェイスにドッキングできる子ウィンドウ内に Windows フォーム コントロールを配置できる「ドックバー」を作成する機能を公開します。
Dockbar に追加された ElementHost コントロール内に単純な WPF TextBox を配置しようとしています。これは一見すると正常に動作するように見えます。しかし、TextBox に入力しようとした後、特定のシーケンスのみが実際に TextBox に表示されます。DELETE、BACKSPACE、COPY、PASTE、およびSELECTING TEXTが機能します。A ~ Z、1 ~ 9 などを入力すると、これらのキーは表示されません。
私はネットを調べて聞いたことがありますElementHost.EnableModelessKeyboardInterop()
が、これはフォームから作成されている WPF Windows にのみ適用されます。私は WPF UserControls を作成し、ElementHost コントロールでそれらをホストしているだけです。
Dispatcher.Run() について話している投稿を見ましたが、ある程度は機能しますが、フォームの残りの部分が壊れています。
System.Windows.Threading.Dispatcher.Run();
PreviewKeyUp 、PreviewKeyDown、KeyUp、およびKeyDownイベントはすべて TextBox で発生しますが、残念ながら TextBox にテキストは表示されません。
Windows メッセージについてはよくわかりませんが、WinSpector を使用して、TextBox から WM_GETTEXT メッセージが来ていないことに気付きました (そうであるべきかどうかはわかりません)。
また、新しい Windows フォーム プロジェクトを作成し、そこで同じことを行ったところ正常に動作したため、Rhino 3D エンジン内でウィンドウを作成してドッキングする方法に問題があるはずです。
動作しないサンプルコードは次のとおりです。
ElementHost el = new ElementHost();
System.Windows.Controls.TextBox t = new System.Windows.Controls.TextBox();
t.Width = 100;
t.Text = "TEST";
el.Child = t;
panel1.Controls.Add(el);