web-dev-qa-db-ja.com

WindowsフォームではなくWPFを使用する方が良いですか?

まったく新しいアプリケーションの場合、WindowsフォームではなくWPFを使用する方がよいでしょうか。以前はWindowsフォームを使用していましたが、WPFはあまり使用していませんでした。私の知る限り、WPFはWindowsフォームの後継ですよね?

アプリケーションは、多くのカスタムコントロールを使用してDirectX Windows(WPF 3Dではなく、 Managed DirectX および SlimDX )をホストします。

編集:アプリケーションは、3D関連のアプリケーション、エディター、たとえば modo :です。

Image created using the 3D painting program modo.

21
Joan Venge

----編集2 -----

表示したようなエディターを作成しようとしていることを考えると、WPFをさらに実行することをお勧めします。私の現在のプロジェクトには、これらの方針に沿った多くの機能もあり、WPFをDirect3Dコンテンツと合成する機能は非常に強力であると判断しました。長方形のウィンドウだけでなく、シーンを何にでもレンダリングできるのは素晴らしいことです。 WinFormsでは、ほとんど1つの長方形に制限されており、そこの空域にも問題がありました(微妙ですが、メニューがhwndをプルするときのちらつきの問題など)。 D3DImageを備えたWPFコンポジターは、これらの問題をすべて取り除き、想像力を駆使して非常に柔軟なUIを構築できるようにします。 WPF3Dオブジェクトの側面でシーンをリアルタイムでレンダリングしたり、D3DでGUIを実行する代わりに、d3dシーンの上で直接WPFコントロールを使用したりすることなどが可能です。

- - -元の - - - - -

DXをホストする場合は、それを検討することをお勧めします。特に、UIを使用してシーンの構成を行うことができ、 D3DImage を使用すると空域の問題が発生しないためです。

これはSlimDXとWPFで機能します。

----編集-----

WinformsでDirect3Dを使用することの欠点、およびWPF/DX統合の利点の詳細については、以下を参照してください。

空域に関するMSDNの記事

D3DImageの紹介に関するCodeproject arcticle

12
Reed Copsey

この質問は約9か月前に処理しました。 WPFを使用することにしましたが、これまでのところ、この決定に満足しています。はい、学習曲線があります。特に、学ぶことがたくさんあるWinFormsから来ることはかなり重要です。また、デザイナーにアクセスできることをお勧めします。そうしないと、アプリケーションが少しぼろぼろに見える可能性があります。また、「なぜこれほど大変だったのか」と頭を悩ませるのに何時間も費やすWPFの落とし穴に備えてください。

しかし、WPFは一歩先を行っています。ウィンドウの外観をデータバインディング、テンプレート化、および完全に制御することで、WinFormsが本来あるべき姿であると考えることができます。

そうそう、いくつかの不足しているコントロールのために数ドルを払う準備をしてください。日付ピッカーやツリーコントロールのチェックボックスなど、いくつか欠けているものがあります(実際にはこれをテンプレート化できますが、その点ではWinFormsほど単純ではありません)。 3.5 SP1には、ありがたいことに、グリッドコントロールが含まれています。

私はもっ​​とたくさんを逃していると確信しています、しかしそれは私が頭のてっぺんから思いつくことができるものです。

幸運を!

19
billb

これが古い投稿であることは知っていますが、それでも有効な質問だと思います。

私は最初に働いた会社で3年間WinFormsを使用しました。そこには本当に優秀なプログラマーが何人かいて、彼らはいくつかの非常にクールなことをするためのいくつかの非常に賢い方法を見つけました。 WinFormsは時の試練に耐えてきました。堅牢で信頼性が高く、効率的なプラットフォームです。多くの人々、そして大小を問わず多くの企業がWinFormsを何年も使用しており、このテクノロジは何度も何度も証明されています。あなたがマイクロソフトであっても、そのような慣性は戦うのが難しいです。

それでも、WPFは間違いなく未来です。 Microsoftは、Visual Studio2010やExpressionBlendなどの製品を作成することで、そのことを明確にしました。 (内部プロジェクトにWPFを使用する際に、Microsoftはフォントのレンダリングや速度の問題など、最初は採用できなかった多くの問題を修正することを余儀なくされました。VisualStudio2010は、WPFが長い間本番環境に対応していることを示しています。

それで、WinFormsまたはWPFでプログラムを書く方が良いですか?答えはこれです:WPF。私はこれを2つの理由で言います。まず、Microsoftが社内でサポートしているため、非常に長い間存在すると想定できます。マイクロソフトは、それが私の次のポイントにつながる次の選択ツールであることを示しました:それはWinFormsよりも優れています(私が反対するように話した人もいますが、それでも真実であり、毎日より明白になっています) 。 WPFには、WinFormsには(おそらく)決して提供されない機能が多数あります。たとえば、統合サポートのすばらしいデータバインディングや、アプリのすばらしいテーマを簡単に作成できるタイムラインベースのアニメーションなど、デザイナーが切り替えを懇願します。 WPFには、コメントで説明できる以上のことがたくさんありますが、これらは私にとって2つの大きなものです:)

そうは言っても、WinFormsではできないことはWPFではできないことを私は知っています。ひどくやりたいのなら、どんな言語でも何でもできます。重要なのは、WinFormが他の誰かが何かクールなことをした方法をグーグルで調べてくれるところですが、WPFには、MicrosoftがWindowsの未来と見なすすべての機能のサポートが組み込まれており、すぐに利用できます。

時間の経過とともに、人々はWindowsに直接組み込まれる新機能に慣れ、使用するすべてのアプリケーションでそれらが利用できることを期待するようになります。これは、それらをサポートしないものは不格好で使いにくく、お金をかける価値が少ないように見えるようになるでしょう。 (タッチ統合はこの最も明白な例だと思います。モニターに固定してマウスをエミュレートするタッチスクリーンソリューションはありますが、どのコンピューターでも、タッチスクリーンテクノロジーは非常に長い道のりを歩んできました。Windows8では境界線が曖昧になっています。デスクトップデバイスとモバイルデバイスの間で、アプリケーションがWinFormsを使用している場合、実装が非常に困難な方法でアプリケーションを使用したいと思う可能性があります。)

遅かれ早かれ、WinFormsのサポートと開発が停止し、取り残されたすべての人が迅速に移植を余儀なくされると私は信じています。ただし、MicrosoftのWinFormsに依存しているプログラムが多すぎて、近い将来にそれを削除することはできません。何が起こるか誰が知っていますか。おそらく、WinFormsはMicrosoftにとって、ItaniumプロセッサはIntelにとって、より良いソリューションが利用可能であっても、それを継続するのに十分なユーザーがいる製品になるでしょう。 ( http://arstechnica.com/business/news/2011/06/ask-ars-why-itaniumask-ars-with-xeons-improvement-why-bother-with-itanium.ars

したがって、私のアドバイスは次のようになります。新しい開発に関しては、WPFに切り替えてください。トレーニングコースにスタッフを派遣するか、しばらくプレイさせて、テクノロジーをよりよく理解できるようにします。学習曲線は急勾配になりますが、これを行うと、チームのスキルセットが向上します。これは、WPFを学習することで、WPFに精通している人々ができるようにWPFと十分に類似しているSilverLightの学習にも進むためです。すぐに習得できますが、デスクトップではなくWeb用に設計されています。 WPFで書き直されたアプリは、後でWebアプリに変換するのがはるかに簡単になるため、これは価値があります。 WPFは新しいものですが、単に人々が学ぶために何か他のものを作るためではなく、理由のために作られました。これは、アプリケーションをよりユーザーフレンドリーで直感的でポータブルにするために設計されました。これは、開発者がアプリケーションを新しい時代のコンピューターに適合させるのに役立つように設計されました。

WinFormsで記述されたアプリケーションについて:WinFormsは、それが得たサポートの量だけで、かなり長い間サポートされ続けると考えるのが安全だと思います。チームにWPFに慣れさせ、アプリケーションをゆっくりとWPFに移行することをお勧めします。マイクロソフトが許可し、プロセスを急がないように常に注意してください。ただし、何らかの形でWinFormsの日が終わり、何が起こるかは誰にもわかりませんが、レガシー製品のサポートは終了することを常に念頭に置いてください。それが正当化されるとすぐに。 WinFormsアプリケーションが何年もの間保持されている場合でも、時代は変化していることを覚えておくことが重要であり、私たち全員がそれらとともに変化する必要があります。

17
Dane

Expression BlendとWPFを理解すると、WindowsフォームよりもUIの構築の生産性が向上することがわかりました。私の考えでは、それは新しいテクノロジー/ツールの最大の要因の1つです。新しいツールで古いツールと同じ結果をより速く達成できない場合は、10%の時間しか使用しないすべてのベルとホイッスルがそれを補うことはできません。

それとは別に、WPFにはフォームに勝る他の利点があります。

  • XAMLにインターフェイスがあると、これらのあいまいなプロパティをすべて微調整したり、あるコントロールのセクション全体を別のコントロールにカットアンドペーストしたりするのが非常に簡単になります。

  • WPFを使用すると、インターフェイスのモジュール化がはるかに簡単になり、画面を制御ごとに分割できます。フォームはある程度同じことをすることができますが、私はいつもそれが戦いだと思っていました、

  • いくつかの鐘と笛はかっこいいです。アニメーション(ストーリーボード)の使用は、選択した製品などに応じて異なる入力ボックスが必要なデータ入力画面に非常に役立つことがわかりました。フォームでは、データ入力画面ごとに個別のパネル/フォームを作成する必要があります。WPFでは、アニメーションを使用してさまざまなテキストボックスを非表示にしたり移動したりします。

6
sipwiz

多くのカスタムコントロールを作成している場合は、WPFを選択します。 WPFの設計の一部は、拡張可能で構成可能である必要があり、その結果、カスタムコントロールを簡単に作成できます。

WinFormsでカスタムコントロールの記述を少し行ったのですが、それは非常に困難な場合があります。レイアウトは本当にあなたから少し時間がかかります。私の人生のいくつかの週末は、WinForm ControlLayoutに支払われました。 WPFで同等のコントロールを作成するのは簡単でした。

5
JaredPar

私たちもこれを経験しました…WinFormsではなくWPFへの移行を開始しました。最近では、WinFormsを後回しにするのは非常に簡単な決断だと思います。ツールはどんどん良くなっていて、チームに真のデザイナーを迎えることができれば、まとめることができないものはほとんどありません。

私たちの未来は実際にはWPFではなく、Silverlightであることに気づき始めています。 Silverlightが成熟するにつれて、WPFと同等になり、クロスプラットフォームでの実行が可能になります。 Silverlightのパスは、Adobe Airに似ており、いつの日かブラウザーの外部に存在します(実際には、今すぐ実行できますが、面倒です)。 .NETUIの将来はSilverlightになると本当に思います。

3
Brian ONeil

この場合、ベンダー(Microsoftなど)の主導に従うと思います。彼ら自身の内部生産はますますWPFを特徴としています。その範囲(Silverlightを考えてください)と深さは明らかにWinFormsよりも大きいです。また、ベストプラクティスを参照してますます使用しています。すべての証拠(ここおよび他の場所)から、プライムタイム開発の準備ができているように見えます。

あなたはWinFormsに対して特別な親和性を表明していません(私はそこにあるものは親しみやすさに基づいていると思います)。最終的に切り替える必要があります。新しいプロジェクトは、プロセスを開始するのに最適な場所であり、他のすべては同じです。

2
dkretz

非常によく似た製品(WPFでデータをマイニングするための3Dビューア)を最近作成したので、間違いなくWPF/SlimDXをお勧めします。

ツールは少し緩いですが(特にVisual Studio)、WPFを使用すると、ほとんどのものにあるデフォルトのコントロールグレーではなく、少しZingを使用してアプリを作成するのがはるかに簡単になります。

3.5SP1のD3DImageを使用すると、コントロール内でSlimDXデバイスをホストするのは非常に簡単です。

全体として、WPFの使用は良くない、ただ違うと思います。良いものもあれば、悪いものもあります。しかし、それは間違いなく未来です。

2

あなたの場合、WPFは理にかなっています。私にとっては、Windowsフォームで本当にうまくできることがたくさんあるので(ビジネスアプリケーションの迅速な開発など)、アプリケーションの選択によるアプリケーションです。私はWPFを使用して、メディアセンターアプリケーション(50インチプラズマスクリーン上のメディアコンソール用の個人プロジェクト)用のNiceGUIを作成しています。

ただし、データ入力および表示アプリケーションを作成している場合は、通常、開発の速度を上げるためにWindowsフォームを使用します。 [〜#〜] xaml [〜#〜] エディターはVisual Studio 2010の方が優れていますが、まだ道はあります。参照がないと、多くのプロパティ属性に関するIntelliSenseのヘルプがないため、それらに何が含まれているかを知ることは不可能です(ここで、本やWeb上の例を通じて、これらの値を見つけるために多くの時間を費やしています) 。とはいえ、WPF書き込みを行うと、非常に魅力的なユーザーインターフェイスを作成できます。

1
John

AFAIK WPFはWinFormsの後継ですよね?

MSがこれをプッシュしたいと思うほど、これが真実であるとは思わない。 Winformsに記述されたレガシーコードが多すぎるため、近い将来、または少し遠い将来に現実的なものにすることはできません。

したがって、それを念頭に置いて、必要に応じて、WPFの学習に時間を費やす余裕がある場合は、それを行います。それ以外の場合は、Winformsを使用します。

1
Dan Blair