新しい GUI を作成する場合、Windows フォームよりも WPF が優先されますか?[閉まっている]
質問
Windows フォームに関する制限やトリックのほとんどは、ほとんどのプログラマーに共通しています。ただし、.NET 3.0 以降では、WPF、Windows Presentation Foundation も利用できます。これを使用すると「セクシーなアプリケーション」をより簡単に作成でき、.NET 3.5 SP1 では実行速度が大幅に向上したと言われています。
しかし、その一方で、WPF では多くのことが異なって動作します。難しいとは言いませんが、「すべて」をゼロから学ばなければなりません。
私の質問:新しい GUI を作成する必要があり、プロジェクトに時間のプレッシャーがない場合に、この余分な時間を費やす価値はありますか?
解決
WPF を使用すると、いくつかの素晴らしいことができます。私は WPF が大好きです。しかし、開発者から新しいテクノロジーに移行すべきかどうか尋ねられるたびに、私は自分の推奨事項を適切に評価する義務があると常に感じています。
開発者は、WPF を効果的に使用する方法を学ぶために時間を費やすことに意欲的 (できれば熱心に) していますか?MFC や Windows フォーム、さらにはアンマネージ DirectX についてこんなことを言うとは思いもしませんでしたが、チームが通常の開発の過程で WPF を「習得」しようとするのは望ましくないでしょう。発送商品のサイクル!
少なくとも 1 人か 2 人の開発者がある程度のデザインセンスを持っているか、また最終的なデザイン権限を持つ個人が開発上の問題を十分に理解しているかどうか。そのため、WPF の機能を活用して、単に「カラフル」なだけではなく、実際に優れたものを作成できます。 、無料アニメーションを特集していますか?
ターゲットとする顧客ベースの何パーセントかは、計画していた機能をサポートしない可能性のある統合グラフィックス チップ セットで実行されていますか? それとも、まだ Windows 2000 を実行しているので、顧客として完全に排除されてしまうのでしょうか?あなたの顧客は実際に強化されたビジュアルを気にしているのかと尋ねる人もいるでしょうが、90 年代初頭の「当社のビジネス顧客は色や画像を気にしていません」という社内の議論を経験した私は、競合他社の適切に設計されたソリューションが重要であることを知っています。本当の問題は、彼らが今すぐ気にかけてもらえるような何かを提供できるような条件が整っているかどうかです。
プロジェクトには、互換性のない従来のスキャフォールディングに接続することによるさらなる複雑さを避けるために、少なくともプレゼンテーション層に関して基礎的な開発が含まれていますか (Win Forms との相互運用はシームレスではありません)?
あなたのマネージャーは、開発者の生産性が 4 ~ 6 か月間大幅に低下することを受け入れることができますか (または、気付かないようにすることができますか)。
この最後の問題は、私が WPF の "FizzBin" の性質と考えているものによるもので、タスクを実装するのに 10 の異なる方法があり、あるアプローチを別のアプローチより優先する明白な理由はなく、タスクを実行するのに役立つガイダンスがほとんどありません。選択。どのような選択をしても、その欠点がプロジェクトのかなり後になってから明らかになるだけでなく、プロジェクトのすべての開発者が異なるアプローチを採用することが事実上保証され、その結果、メンテナンスに大きな問題が生じます。最もイライラするのは、フレームワークを学ぼうとするときに常につまづいてしまう矛盾です。
WPF 関連の詳細情報については、私のブログのエントリを参照してください。
他のヒント
3か月かけて結論を出し続けた後、 基幹業務 WPF 上の (LOB) アプリケーションについて、プロジェクトのために Windows フォームに戻ることを検討する段階に達し、他の人の意見を調べているときに、このスレッドを見つけました...
はい、WPF は素晴らしいテクノロジであり、単なる目の保養をはるかに超えた利点があります...テンプレート機能とバインディング機能はその好例です。オブジェクト モデル全体により、より高い柔軟性とより幅広い可能性が提供されます。ただし、これが将来の LOB アプリケーションの事実上のプラットフォームになるわけではありません。
GUI をビジネス ロジックから分離するという点で WPF が解決する「問題」は、適切なアーキテクチャと考え方から始めるだけで Windows フォームですぐに解決できない問題ではありません。WPF のオブジェクト パス バインディング機能も、いくつかの非常に単純なヘルパー クラスを使用して Windows フォームで再現できます。WPF のデータ テンプレート機能は非常に優れていますが、Windows フォームでシミュレートできないことはありません。まれに、特定の部分でどのオブジェクトを表現するか正確にわからない場合があります。スクリーン。
Windows フォームが成熟度の点で先を行っているのです。誰かが Windows フォームの問題を解決したブログを参照せずに、死んだ猫を Google で検索することはできません。一方、WPF では利用できる学習リソースが比較的少なく、利用できるカスタム コントロールも少なく、初期の問題の多くはまだ解決されていません。
WPF と Windows フォームのどちらを選択するかは、開発環境が成熟しているかどうかによって決まります。Windows フォーム エディタは、滑らかで応答性が高く、直観的です。エラーに関するフィードバックは即座に得られ、解決策は通常明らかであり、Windows フォームのコンパイル→デバッグ→編集サイクルは非常に迅速です。
一方、WPF アプリケーションのデザイン時のサポートは比較的貧弱で、最初にエラーが発生するとデザイン ビューがすぐに終了してしまい、多くの場合、デザイナーが作業を開始する前に、修正後にプロジェクトをビルドする必要があります。また。ツールボックスからのコンポーネントのドラッグ アンド ドロップは、まったく機能しないか、まったく直感的でない結果が得られる広範な状況を考慮すると、サポートされないほうがよいでしょう。WpfToolkit の期待にもかかわらず、何らかの適切なパフォーマンスや設計時の利便性をもたらす、WPF 用の使用可能な DataGrid はまだありません。
WPF アプリケーションのデバッグは、次のようなものです。 古い ASP.NET デバッグ パラダイム...打つ F5 -> 待機 -> 起動 -> エラー -> 停止 -> 修正 -> ヒット F5 -> 待つ -> 起動 -> エラー -> うめき声 -> 停止 -> 修正 -> ヒット F5....プログラムが実行しているすべての XAML はロックされており、XAML 固有の問題を追跡するのは面倒なことがよくあります。
簡単に言えば、Windows フォームの開発ツールを使用すると、WPF アプリケーションの数分の 1 の時間でフロントエンドを実行できるようになるということです... 特に マスター/詳細グリッドまたはスプレッドシートのようなインターフェイスを作成している場合は、ほとんどの LOB に備わっています。Windows フォームを使用すると、作業の 90% がすでに完了している状態から開始できます。
私は WPF アーキテクチャの大ファンです。デザイン時のツールセットがアルファ版以前のデバッグビルドのように感じられなければよかったのにと思います。
編集:この回答は .NET 3.5 + Visual Studio 2008 について投稿されましたが、Visual Studio 2010 を備えた .NET 4.0 には WPF データ グリッドが付属しています。新しい WPF 開発エクスペリエンスには多くの改善が加えられていますが、ここでの私の答えは変わっておらず、次の提案を追加したいと思います。
急いでいる場合 ラッド 開発には Windows フォームを使用してください。適切に設計され、保守可能で、スケーラブルで、リソースを重視したマルチユーザー基幹業務アプリケーションを作成したい場合は、ASP.NET MVC + HTML 5 + jQuery を検討してください。これらのテクノロジーを使用した私のプロジェクトは、顧客により良い結果をより早くもたらしました。MVC は WPF と同じテンプレートをすべて提供し、jQuery はアニメーションと複雑な対話を可能にします。さらに重要なのは、ASP.NET MVC + jQuery ソリューションでは、エンド ユーザーが適切なグラフィックス ハードウェアを備えた最新のデスクトップを必要としないことです。
私は現在、顧客の中核システムとなっている WPF を使用して 7 か月が経ちましたが、基幹業務プレゼンテーション プラットフォームとして WPF を学習および使用した経験について、さらに考えを共有したいと思います。
一般的に、上で述べたコメントはまだ有効です...WPF の設計時サポートはまだ提供されていません。リッチ クライアント アプリケーションをすぐに導入したいと急いでいる場合は、Windows フォームを使用してください。期間。Microsoft は GDI / Windows Forms プラットフォームの廃止を急いでいないため、将来にわたって適切なサポートを期待できます。
WPF をマスターするのは簡単ではありません, しかし、WPF の学習に時間とエネルギーを投資するかどうかの決定をそこで終わらせるべきではありません。WPF は現時点では成熟度に欠けていますが、いくつかの便利な最新の概念を中心に構築されています。
たとえば、WPF では、健全な検証ロジックを備えた、適切に作成されたビジネス オブジェクトへの投資は堅実な投資となります。Windows フォームとは異なり、WPF のデータ バインディングには、インターフェイス コントロールが無効なユーザー入力に反応できるようにする機能が豊富にあります。 GUIコードを書かずに それらのエラーを検出します。これは貴重です。
WPF のスタイル設定機能とテンプレート機能も有益であることが証明されています。スタイリングとテンプレートの唯一の用途は、画面上に目を楽しませるためであるというよくある誤解にもかかわらず、実際には、これらの機能により、豊富なフィードバックを提供するユーザー インターフェイスのコーディングが大幅に簡素化されます。たとえば、それに基づいて無効化/有効化するボタンなどです。基礎となるビジネス ロジック レイヤーの状態、またはカーソル下のオブジェクトの状態に基づいてテキストをインテリジェントに検索するツールチップなど。
これらすべてを合計すると、「何も特別なことはしない」にもかかわらず、信じられないほど価値のある機能になります。 ビジネスアプリケーション, 単純に、インターフェースを基になるデータと一致した状態に保つことが容易になるからです。
一言で言えば:
- Windowsフォームでは、ユーザーインターフェイスを設計し、そのユーザーインターフェイスを駆動するコードを作成します。これには、通常、データオブジェクトを駆動するコードも含まれます。
- WPF では、データ オブジェクトを駆動するビジネス層に投資し、それから、 聞く データオブジェクトに。
一見微妙な違いのように見えますが、コードを再利用する能力に大きな違いをもたらします。そこで次のような疑問が生じます。「Windows Forms か WPF かという問題は、実際に投資上の決定事項なのでしょうか?」
(これは私のお気に入りのスレッドになったようです。)
WPF を使用する説得力のある理由はありますか
絶対に!WPF は本当に素晴らしいです!Windows フォームには欠けている機能が非常に多くあるため、事実上あらゆるプロジェクトにとって大きな利点となります。
ビジネス アプリケーションの場合、最大の利点は次のとおりです。
- 素晴らしいデータ バインディングとテンプレートが最大の違いを生み出します。適切なデータ モデルが構築されたら、数回クリックするだけでデータ テンプレートを作成して使用できます。 エクスプレッションブレンド ドラッグ アンド ドロップを使用して、オブジェクトの外観を正確に設定します。そして、色や形のようなものに束縛することは簡単なことではありません。
- 画面レイアウトは驚くほど柔軟です。WPF のすべてがコンテナーのサイズや形状の変更にスムーズに調整できるだけでなく、アイテムを簡単に拡大したり回転したり、さらにはそのアイテムを含むフレームの外側に拡張したりすることもできます。
- 通常のオブジェクトは、好きな方法で表示でき、異なる画面で異なる表示を簡単に実行したり、表示を共有したり、データ値の変化に表示を適応させたりできます。
- 印刷する必要がある場合、プリンターへのレンダリングは簡単です。適切に構成すると、WPF は次のようになります。 クリスタルレポート または SQL Server レポート サービス (SSRS)子供のおもちゃみたいです。
- マウスを上に置くとアニメーションするボタンなどの優れた機能を含め、ユーザー インターフェイスの見た目と感触がさらにダイナミックになります。
ユーティリティとゲームの場合、他の利点が最前線にあります。
- 外部エディタを使用せずに、図形、線、および任意の描画をアプリケーションに簡単に追加できます。これらのすべてのコンポーネントは、データにバインドしてアニメーション化することも、コードによって制御することもできます。Windows フォームでは、多くの作業をしたくない場合を除き、通常はビットマップをインポートしてそのまま使用するだけで済みます。
- アニメーションがカッコいい!やりすぎない限り、ユーザーは非常に感銘を受けるでしょう。また、人々が何が起こっているかを確認し、強調表示する必要性を減らすのにも役立ちます。たとえば、オブジェクトをドラッグするときに、ターゲットをアニメーション化して、ドロップした場合に何が起こるかを示すことができます。
- 色、グラデーション塗りつぶし、ブラシ、派手なフォント、オブジェクトの回転、タイル ブラシなど。グラフィカルに欲しいものは何でもあなたのものになります。
- 信じられないほどカスタマイズ可能。あるアプリケーションでは、電車を落とせるように線路を描画する必要がありました。数時間後、次のツールを使用して画面上のどこにでも線路を描くことができました。 ベジェ曲線, そうすると自動的に参加して切り替わります。
肝心なのは、Windows フォームで構築できる大きなサイズの GUI は、WPF では 3 分の 1 (またはそれ以下) の労力で構築でき、見栄えもはるかに優れているということです。
WPF はより多くのリソース (特に RAM) を必要としますか?
Windows フォームに比べて料金はかかりますが、それはわずかです。
- 実装に応じて、RAM が増減する可能性があります。WPF はデータをより効率的に保存するため、個々のオブジェクトは小さくなりますが、Windows フォームよりも WPF の方がオブジェクトの数が多くなる傾向があるため、バランスが取れ、どちらかが優先される可能性があります。
- Windows Formsに比べてCPUが上がります。私の経験では、画面上の WPF オブジェクトの実際の更新には、通常の Windows フォームのレンダリングの約 2 倍の CPU が必要です。アプリケーションが画面の更新にほとんどの時間を費やしている場合、WPF は適さない可能性があります。ただし、その場合、Windows フォームも使用していない可能性があります。ほとんどの本格的なゲームは直接書き込まれます。 ダイレクトX.
- WPF では Windows フォームよりも必要なコードがはるかに少ないため、ディスク使用量がわずかに少なくなります。もちろんデータのサイズは同じになります。
CPU 使用率についてもう 1 つ注意してください。実際、アニメーションと変換 (モーション、変換など) は、保存モードのストレージがあるため、Windows フォームよりも WPF の方が効率的です。遅いのは、そこにあるオブジェクトの最初の取得です。
メンテナンスのオーバーヘッド
WPF は、 巨大な メンテナンスに関しては Windows フォームに勝ります。すべてが以前の 1/5 のコードで実行されるため、維持するコードも 1/5 になります。さらに、定型的なものはすべて削除されているため、実際に作業を行うコードに集中できます。
XAML の利点
XAML WPFの中核です。WPF は XAML なしでも使用できますが、XAML を使用すると非常に使いやすくなります。XAML には、ユーザー インターフェイスを簡単に指定する HTML の機能がありますが、その組み込みタグはより強力であり、独自のタグを簡単に定義できます。(実際、そうするのが普通です)。
XAML の具体的な利点は次のとおりです。
- UI 全体は、ユーザーとツールの両方にとって読みやすく操作しやすいテキスト ファイルで定義されます。
- MarkupExtensions を使用すると、明確かつ簡単な方法でバインディングを指定できます。
- 型コンバーターを使用すると、複雑な型のプロパティを簡単に指定できます。たとえば、Brush="Green" と言うか、3 つのストップを持つ放射状グラデーション ブラシを指定できます。
- 独自の要素を作成できます
- WPF の強力な「添付プロパティ」を簡単に活用できます。
その他の洞察
私は何年も WPF のようなものを夢見てきました。多くの人がこの機能の一部を実装していますが、すべてを 1 か所でこのような価格 (0 ドル) で利用できるのは驚くべきことです。
WPF は Windows フォームからの大きなパラダイム シフトであり、慣れるまでに時間がかかりますが、学習に費やした時間は何倍にもなって返ってきます。
WPF は 5 年経った今でもまだ多少の傷は残っていますが、一度体験するとその威力に圧倒されるでしょう。誰かがあなたを Windows フォームに引き戻そうとしたとしても、あなたは蹴ったり叫んだりするだけでしょう。
チップ:- 開発のために式ブレンドのコピーを入手してください - XAMLをたまに手で編集してください - 最初は奇妙に思えないときはあきらめないでください
WPF には Windows Vista または Windows XP SP2 が必要です。これは面倒な要件ではありませんが、重要な要件です。Windows 2000 上で実行したい場合 (今でもそうする人がいます)、WPF は機能しません。
WPF も新しいテクノロジであり、Windows フォームほど実証されていないため、特に大規模なアプリケーションの場合は、リスクの少ないオプションとして Windows フォームを選択することもできます。
そうは言っても、はい、WPF は未来です。Visual Studio 2010 は WPF で書き直されており、これはおそらくこれまでで最大の WPF アプリケーションとなり、このテクノロジの本当のテストにもなります。
明らかに、従来の Windows フォーム アプリケーションが正しい選択となる別の状況もあります。
他の人も言っているように、どちらの方法でもメリットとデメリットがあります。他の人も述べているように、WPF の利点は次のとおりです。
- 非常にリッチな UI を作成する機能 比較的 簡単に。
- より簡単なアニメーションと特殊効果
- 固有のスケーラビリティ (WPF アプリケーションおよび Windows フォーム アプリケーションで Windows Vista 拡大鏡ツールを使用します。)WPF アプリケーションでは、すべてのベクター アートが美しく拡大縮小されることに注意してください)
- (意見警告) WPF でドキュメント指向システムを実行する方が「簡単」だと感じます
ただし、Windows フォームが優先される WPF には次のような欠点があります。
- WPF のインボックス コントロール スイートは、Windows フォームのコントロール スイートよりもはるかに制限されています。
- Windows フォームのサードパーティ コントロール スペースでは、サポートが強化されています。(もちろん、状況は変わりつつありますが、考えてみてください。Windows フォームは 2001 年から存在しています。WPF を始めてまだ数年。時間の都合上、Windows フォームはコミュニティでのサポートが強化されています)。
- ほとんどの開発者は Windows フォームをすでに知っています。WPF は新たな学習曲線を提供します
最後に、作業を行えば (または適切なサードパーティ ツールを使用すれば)、どちらのツールでも優れた、魅力的で魅力的な UI を作成できることを心に留めておいてください。結局のところ、どのような状況においても、どちらが優れているとは限りません。プロジェクトに適していると思われるものを使用してください。
WPF のプログラミング モデルは、Windows フォームよりもオープンで柔軟ですが、ASP.NET MVC と同様に、Model-View-ViewModel パターンを正しく実装するにはもう少し規律が必要です。
私の最初の LOB WPF を使用したアプリケーションは完全な失敗に終わりました。これはリソースを大量に消費し、エンド ユーザーの非常にローエンドのラップトップの動作を停止させたためです。これは結局のところ、私が WPF + を使い始めたからでした。 LINQ to SQL そして良い結果が期待できました...そして、これが WPF が Windows フォームと大きく異なる点です...Windows フォームでは、そのようなことは回避できます。WPF は Windows フォームよりもリソースがはるかに重いため、アプリケーションを無駄のない設計にしないと、800 ポンドのゴリラになってしまいます。
WPF を敬遠しないでください...それを探索してください。ただし、Windows フォームのコーディングで許容される罪は、WPF では良い結果をもたらさないことに注意してください。これらは根本的に異なるエンジンであり、根本的に異なるコーディング パターンに適しています。
最後の言葉:WPF を使用する場合は、リストとグリッドで使用するデータ仮想化についてよく理解しておく必要があります。単純なデータ バインドされた ListItem や GridCell は、WPF では最終的には巨大な論理的かつ視覚的なオブジェクト グラフになり、仮想化の方法を学ばなければ、アプリケーションは大規模なデータ セットで適切に動作しません。
WPF の学習は非常に困難なため、最初にわかりやすい書籍を入手することをお勧めします (アダム・ネイサン, セルズ/グリフィス, 、 そしてクリス・アンダーソン)およびブログ(ジョシュ・スミス, 、など)。準備を整えて、プロジェクトで WPF を学習する時間が確保できるようにしてください。
テクノロジーの学習に加えて、WPF アプリケーションの構築に使用されるパターンの学習にも時間を費やしてください。 モデルビュー ViewModel (MVVM) は広く受け入れられているようです。
個人的には、WPF には価値があると思いますが、あらかじめご了承ください。また、ユーザーを Windows XP SP2 以降と Windows Vista に事実上制限することにも注意してください。私たちはその決定を下しましたが、お客様には別の要件があるかもしれません。
どちらのテクノロジーにも長所と短所があります。「クラシック」UI を備えた大規模なアプリケーションでは、Windows フォームを使用します。豊富なユーザー インターフェイス (スキニング、アニメーション、ユーザー インターフェイスの変更) を必要とするアプリケーションでは、WPF を選択します。記事をチェックしてください WPF とWindows フォーム WPF と Windows フォームの比較。
UI デザインの柔軟性以外にも、WPF には技術的な利点がいくつかあります。
1.) WPF は GDI オブジェクトに依存しません。 そうですね、ウィンドウ自体のインスタンスに 2 つの GDI オブジェクトが使用されていると思いますが、実際には何もありません。私は、非常に大規模な社内 Windows フォーム アプリケーションにある程度関与してきました。私たちのオフィスのスタッフは、3 つまたは 4 つのインスタンスを同時に実行することがあります。問題は、Windows 2000、XP、および Vista に固有の 10,000 GDI オブジェクト制限に頻繁に遭遇することです。これが発生すると、OS 全体が応答しなくなり、視覚的なアーティファクトが発生し始めます。これを解決する唯一の方法は、アプリケーションを終了することです。
2.) WPF は GPU を利用します。 UI 処理の一部を GPU にオフロードする WPF の機能は優れています。この点は時間の経過とともに改善されることを期待しています。元 OpenGL プログラミング愛好家として、私は GPU から得られるパワーを高く評価しています。つまり、私の 100 ドルのビデオ カードには、それぞれ 1.5 GHz で動作する 112 個のコアが搭載されています (これは決して最高級ではありません)。この種の並列処理能力は、どのクアッドコア CPU も顔負けです。
ただし、WPF はまだかなり新しいものです。Windows 2000 では動作しません。実際、WPF アプリケーションは、新たに再起動した後、起動が遅くなることがあります。これらすべてについて、私はブログで話しています。http://blog.bucketsoft.com/2009/05/wpf-is-like-fat-super-hero.html
WPFを学ぶ価値はあると思います。私見ですが、一度慣れてしまえば、フォームのデザイン作業はずっと簡単になります。「セクシー」なことについてはそれほど心配していません。これらのほとんどは単なる流行です。WPF では、「通常の」 Winforms スタイルのアプリケーションを非常に迅速かつ簡単に作成できます。
全体のコンセプトは、IMO の設計を容易にするのに役立ちます。
ここでの回答の一部には同意しません。WPF は次のような用途に非常に適しています。 業務内容 (LOB) アプリケーション。(frog design LOB クライアントが最良の例です)。また、UI を目の保養にするあらゆる可能性 (ビジネス アプリケーションでは必要ありません) に加えて、WPF はさらに多くのことを提供します。
データ バインディングとテンプレート機能は、Windows フォームよりも優れています。また、コードとプレゼンテーションを分離するためのはるかに優れた方法も提供します。私たちは、開発者が 2 ~ 3 人以下のチームで 2 つの LOB アプリケーションに WPF を使用することに成功しました。
おそらく直面する最大の問題は、(Windows フォームと比較して) WPF の学習曲線が急峻であることであり、WPF に慣れていない開発者にとっては開発速度が低下することになります。
現在、Windows フォームから WPF でアプリケーションを書き直しています。確かに、学習には時間がかかり、いくつかのことを「再学習」する必要がありますが、それだけの価値はあります。また、WCF と組み合わせることで、これまでよりも少ないコードで、より速く、より堅牢に記述できるようになりました。
しばらく続けて読んでください アダム・ネイサンの本, 、そして増え続けるサードパーティ製コントロールのライブラリをチェックしてください。 テレリク そして コンポーネントワン. 。私が考えるマイナス点の 1 つは、デザイン ツールが エクスプレッションブレンド, 、非常に使いにくいです。最新バージョンはまだベータ版ですが、Visual Studio を長年使用している人にとっては、まったく適切ではありません。はい、主にデザイナー向けですが、Visual Studio ではできないこともあります。
インターフェイスのデザインが重要な場合は、WPF の方が優れた UI エクスペリエンスを提供できるため、WPF を検討してください。しかし、Windows フォームは長年の進化を経て機能することが証明されており、そのプラットフォームに精通したプログラマーが数多くいます。
また、移植性も問題になる可能性があります。WPF は Windows XP SP2 以降でのみ動作します。
また、WPF の学習曲線は急勾配であるため、特定の WPF 経験がなければ、高品質の製品を提供するのは簡単ではありません。
WPF は .NET 3.0 の一部であるため、答えの 1 つは「1.1 または 2.0 をサポートする必要がある場合」です。WPF には OS の既知の制限があり、明らかなスキルの問題があります。winform に精通した開発者チームがいる場合は、堅牢なコードを作成するのが簡単になる可能性があります。 と winforms。ただし、大量の UI コードを作成している場合は、ある時点で WPF を使い始める価値があると考えられます。
WPF には Silverlight と多くの共通点があるため、譲渡可能な利点もあります。
WPFには、優れたデータバインディング機能、懸念の分離、設計の分離、論理など、多くの利点があります...
開発者として、私はWindowsフォームのデザイナーに縛られているのではなく、XAMLを使用してUIを定義する機能を楽しんでいます。
個人的には、Windowsの古いバージョンがサポートされていないことを気にしませんが、WPFの大きな問題の1つは、モノによってサポートされていない(現在/これまで)ではないことです(現在/これまで)http://www.mono-project.com) そのため、WPF アプリは Mac OS または Linux では実行できません。(Silverlight アプリケーションでも同様です)。
WPF の学習に投資できる時間とリソースがある場合は、ぜひ学習してください。複数の OS をサポートする Silverlight アプリケーションを作成する場合でも。
デスクトップ アプリケーションを複数の OS で実行する必要がある場合は、SWF を使用してください。
多くの違いがあります。私たちが WPF を気に入ったのは次の点です。
- プログラミングの宣言型スタイル。
- アニメーションと状態遷移
- Expression Blend は素晴らしいツールです
- スタイルもしっかりサポート。
ただし、次の理由から Windows フォームにこだわりました。
- 開発者がWPFをすでに知っているときにWPFを学習するのにかかる余分な時間。
- WPFはWindows 2000以下では実行されません。
どちらを使用するかを決定する際の最大の考慮事項は、対象ユーザーがどの .NET Framework をインストールしているかを考慮することです。Windows フォームのみをサポートする下位の .NET Framework バージョンを使用している人の方が多いようですが、これは私の個人的な経験にすぎません。
WPF の利点は、カスタム コントロールとアニメーションを使用して見栄えの良い GUI を作成するのがはるかに簡単であることです。WPF は、プレゼンテーション層とロジック層をさらに分離するのにも役立ちます。デザイナーがいる場合は、この作業の 95% を非コーダーに任せることができ、コーダーがロジックに取り組むことができるようになります。欠点は、Expressions Blend のソフトウェア コストが高いことと、Visual Studio コード プロファイリング ツールが XAML をレンダリングしようとするときにフレームワーク呼び出しに巻き込まれる傾向があるため、適切に機能しないことです。他にもあると思いますが、実際に見たのはこの2つだけでした。
主な考慮事項は、顧客に .NET 3.0 またはさらに優れた .NET 3.5 SP1 のインストールを要求するかどうかです。いくつかの否定的なフィードバックが得られます
WPF を使用すると、フォームのデザイン作業を、デザイナーの服を着た開発者ではなく、実際のデザイナーに引き継ぐことがはるかに簡単になります。それがやりたいことであれば、WPF が答えです。従来の Windows スタイルのボタンで問題ない場合は、おそらく Windows フォームが最適です。
(複数の回答では、インターフェイス デザインが「重要」である場合は WPF を使用する必要があると主張していますが、これは非常に曖昧です。インターフェイスのデザインは常に「重要」です。)
MSDN ライセンスをお持ちの場合は、チェックしてください 表現ツール. 。これは明示的に WPF 用に設計されており、Visual Studio に直接エクスポートできるため、移行を容易にすることができます。
Windows のサポートのみに関心があり、学習にかかる時間が気にならない場合は、WPF を使用してください。高速かつ柔軟で、再スキンが簡単で、それを操作するための優れたツールが備わっています。
おまけに、Silverlight は WPF に基づいており、どちらかを使用して開始すると、もう一方を使用するためのノウハウを得ることができます。物事が Web ベースになり続ける場合、ブラウザ (または Windows Live Mesh) に簡単に転送できる事前知識 (および既存のコードのライブラリ) があれば、ソフトウェアの寿命を延ばすのに役立つ可能性があります。
上記の回答ですでに説明した長所と短所を考慮して、WPF を使用することに決めた場合は、これを実行することを強くお勧めします ビリー・ホリスとの dnrTV エピソード
で ドットネットロックス エピソード 315, ブライアン・ノイズはこれについて広範囲に議論しています。
WPF でのテキストのレンダリングには既知の問題があります。多くのユーザーは、アンチエイリアスとピクセル ブレンディングを多用するとテキストがぼやけてしまうと報告しています。これは状況によっては大きな問題であり、私の知る限り、Microsoft もある程度は認めています。
過去 3 年半の間、私は (2 つの会社で) Windows フォームの開発を行ってきました。どちらのアプリケーションも広範囲に使用され、最終的には GDI の問題が発生しました。大規模な Windows フォーム アプリケーションは最終的に GDI リソースを使い果たすため、エンド ユーザーは再起動する必要があります。
Scott は Expression Blend について不満を述べています そしてそれが開発者として彼にとっていかに理にかなっていないか。Expression Blend に対する私の最初の反応はそのようなものでした。ただし、今ではこれが非常に貴重なツールであると考えていますが、それは実際には開発者のタイプによって異なります。
私はユーザー インターフェイス開発者で、次のことを実行する必要があります。 インテグレータ 最終的には、Expression Blend がスタイルを作成し、WYSIWYG 方式でテンプレートを制御するのに非常に貴重であることがわかりました。私はほとんどの場合、Expression Blend と Visual Studio を同じプロジェクトで同時に実行しています。
また、Expression Blend で遊んで、 XAML これは、WPF API を学習する優れた方法です。Windows フォームでデザイナーを使用し、そこから吐き出される C# コードをチェックするのと同じように、そこでデザインしているものを使用する方法を学ぶのに役立ちます。
Expression Blend が役に立ちます。特にアプリケーションのビジュアルに取り組んでいる場合は、ぜひ試してみてください。
からの引用 マークからの以前の投稿:
- Windows フォームでは、ユーザー インターフェイスを設計し、そのユーザー インターフェイスを駆動するコードを記述します。これには通常、データ オブジェクトを駆動するコードも含まれます。
- WPF では、データ オブジェクトを駆動するビジネス層に投資し、データ オブジェクトをリッスンするインターフェイスを設計します。
これは、Windows フォームを使用しているか WPF を使用しているかというよりも、設計上の選択であると私は主張します。ただし、特定のテクノロジーが特定のアプローチにより適している可能性があることは理解できます。
WPF の専門知識がなく、WPF に投資したくない場合のみ:)