9

最終的にWPFに移植される古いWindowsフォームアプリケーションがたくさんあり(これは大きなアプリケーションであるため、1回のスプリントでは実行できません)、WPFでメインメニューを作成することからプロセスを開始しました。Windowsフォームアプリケーションは、このメニューから開く個別のウィンドウです。

Windowsフォームアプリケーションは、ショートカットとキーで発生している問題を除いて、問題なく開いて動作しています。Tabタブキーはフォーカスを次のコントロールに移動せずAlt、&Searchボタンをトリガーするキーは機能しなくなります。

私は何が間違っているのですか?

4

5 に答える 5

6

私が発見した部分的な解決策は、WPF コンストラクターからこれを呼び出すことです: System.Windows.Forms.Integration.WindowsFormsHost.EnableWindowsFormsInterop(); (dll WindowsFormsIntegration.dll を参照する必要があります)

すべてのキー ストロークが期待どおりに機能するわけではないため、部分的と言います。たとえば、単純なフォームでは問題なく動作するようです。

これを参照してください:
http://msdn.microsoft.com/en-us/library/system.windows.forms.integration.windowsformshost.enablewindowsformsinterop(v=vs.100).aspx

于 2013-09-11T15:25:02.020 に答える
4

WPFフォーム内のWindowsFormsHostコントロール内にwinformをホストすることで、最終的に問題を解決できました。

public partial class MyWindow : Window
{
    public MyWindow()
    {
        InitializeComponent();

        Form winform = new Form();
        // to embed a winform using windowsFormsHost, you need to explicitly
        // tell the form it is not the top level control or you will get
        // a runtime error.
        winform.TopLevel = false;

        // hide border because it will already have the WPF window border
        winform.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.windowsFormsHost.Child = winform;
    }

}

フォームを閉じるボタンがある場合は、winform の close イベントも接続する必要があることに注意してください。

于 2012-02-01T12:51:39.570 に答える
3

これは仕様によるものです。ショートカットキーはメッセージループレベルで処理され、Windowsメッセージがフォーカスのあるウィンドウにディスパッチされる前に検出されます。これが、フォーカスに関係なくこれらのキーが機能する理由です。

問題は、メッセージをポンピングするWinformsメッセージループがないことです。Application.Run()は、Winformsではなく、プログラムのWPFによって実装されます。したがって、キーボードメッセージを処理してショートカットキーストロークを実装するWinformsのコードは実行されません。

これに対する良い解決策はありません、それはかなり基本的に「少し妊娠できない」問題です。Winformsのこのコードは、CASバイパスを許可するため、大幅にロックされています。唯一の回避策は、ShowDialog()メソッドを使用してWinformsコントロールを含むForm派生クラスを表示することです。このメソッドは、モーダルメッセージループであるWinformsループをポンピングします。これは、ショートカットキーストローク処理コードを復活させるのに十分です。最初にメインウィンドウを変換し、最後にダイアログを変換して、アプローチを再構築します。

于 2012-02-01T13:09:52.220 に答える
1

IsTabStop="True"TabIndexが割り当てられているかどうかを確認します。ショートカットとして、Alt + Keyアンパサンド (&) の代わりにアンダースコア (_) 文字を使用してみてください。

于 2012-01-31T17:16:17.133 に答える