14

奇妙な相互運用シナリオで自分たちのサポートの悪夢を作成することなく、WinFormsアプリケーションをWPFにゆっくりと進化させるための実用的な方法はありますか?

背景情報:

約60〜75人のユーザーの内部グループによって頻繁に使用される大規模な戦艦の灰色のWinFormsアプリケーションがあります。WPFでアプリを使用することでメリットが得られる場所に出くわし始めていますが、大規模なプロジェクトを完全に書き直すことを正当化するだけでは不十分です。アプリのすべての画面は自己完結型のWinFormsユーザーコントロールであり、WinFormsアプリは、メニュー設定、フォームの開閉、いくつかの共有ヘルパーメソッドなどを処理する単なるシェルです...

これまでのところ、シェルアプリケーションをWPFに変換してから、その中でWinFormsユーザーコントロールをホストするのが最善の方法です。その後、ユーザーコントロールを時間の経過とともに変換し、それらの変更を、追加の作業をサポートするのに十分なビジネス価値を持つイニシアチブに結び付けることができると考えました。相互運用機能がどの程度うまく機能し、パフォーマンスにどのように影響するかが心配です。また、アプリの新しいデザインに移行する方法についても心配しています。シェルアプリをおしゃれに見せてから、古い戦艦の灰色のユーザーコントロールを内部でホストするのは奇妙に思えます。また、WPFでシェルアプリを作成し、WinFormsで行ったように見せることも奇妙に思えます。

Caliburn、Prism、または他の同様のフレームワークのいずれかが移行を容易にする場合は、これらのオプションも検討することができます。

4

2 に答える 2

11

同様の状況で、次のパスを選択しました。最初に、アプリケーションシェル(まだWinForms)でいくつかのWPFウィンドウをホストし始めました。もちろん、目に見える違いはありましたが、新しいウィンドウをトーンダウンすることで、意図的に違いを減らしました。UIが完全にWPFになり、グラフィカルデザイナーがXAMLに基づいて魔法を働かせることができるため、残りのウィンドウ/コントロールを変換するまでに、より鮮やかなエクスペリエンスに「アップグレード」するのが簡単になると考えました。

これで、ウィンドウの大部分がWPFになるようになりました。WinFormsシェルアプリを、残りのWinFormsをホストするWPFベースのシェルアプリケーションに変換するプロセスを開始しました。私たちはある種の鈍い色を持っていますが、ユーザーは違いに気づき始めており、それは小さいですが、ユーザーはまだ漸進的なポジティブな変化を好みます。それほど長くはありません。最後のWinFormを廃止します。それが、グラフィックデザイナーを解き放つときのポイントになります。

パフォーマンスに関して:それはあなたの特定のコントロール/ウィンドウに大きく依存するので、私は確かに一般的な声明を出すことはできません。私たちの製品(数百のウィンドウ)では、WPFとWinFormsの組み合わせに関連する重大なパフォーマンスの問題は見つかりませんでした。

フレームワークについては調べていませんので、コメントできません。

于 2010-08-11T11:45:57.483 に答える
4

すばらしい質問です。現在、WPFでの作業のほとんどは、古いWinFormsアプリケーションをWPFに変換することを扱っています。私の経験から、最良のシナリオは、古いアプリケーション/要件に基づいてアプリケーションを最初から構築することです。幸いなことに、私はアプリケーションを最初から書き直したプロジェクトに参加しており、2つを組み合わせるよりも時間と投資が少なくて済むと確信しています。

個人的には、この2つを混ぜてみたら混乱していたと思います。もう1つのポイントは、混合アプリケーションを効率的に設計するのは難しいということです。

私の現在のプロジェクト(過去10年間で実行されている巨大なプロジェクト)では、アプリケーションモジュールをモジュールごとに変換しています。幸いなことに、私たちのアプリケーションはさまざまな小さなアプリケーションで構成されているため、それらを1つずつ変換する方が簡単です。あなたの場合、ここで提案されているように、完全にWPFに変換できる領域を特定し、それらをWPFで構築し始めると言います-

Windowsフォーム– WPF相互運用性に関するFAQ: http ://windowsclient.net/learn/integration.aspx

また、WindowsフォームをXAML(WPF)に変換するためのいくつかのツールを使用することをお勧めします。それは確かにあなたが時間を節約するのに役立ちます。

WindowsフォームからWPFへのコンバーター: http ://wf2wpf.codeplex.com/

WindowsフォームからXAMLへのコンバーター: http: //www.ingeniumsoft.com/Products/WinForm2XAML/tabid/63/language/en-US/Default.aspx

WindowsフォームからWindowsPresentationFoundationへのコンバーター: http ://www.spiderwan.com/spiderwan/ConvertWinFormToWPF/WinFormToWPF.aspx

于 2010-08-11T11:52:08.997 に答える