WindowsフォームからWPFへの移行


113

長い間、私はWindowsフォームの開発(VB6から始まり、C#.NET 4.5まで続いています)に悩まされてきました。また、純粋な.NETを使用して、Windowsフォームが実行できることの限界にかなり達しました。 、およびネイティブコードの特殊効果。

私はWPFとXAMLを学習しようとしましたが、WPFの新しいデザイナーですぐに行き詰まります。Windowsフォームデザイナと比較すると、使用するのは非常に難しいようです。

Windowsフォーム開発者により適した、.NETのWPFデザイナに代わるものがあるかどうか知りたいですか?


7
私は通常、デザイナーさえも使用せず、全体的なレイアウトが期待どおりかどうかを確認するために保存します。結局のところ、すべてをXAMLで手動で記述したり、必要に応じてBlendを使用したりしています。ただし、私はデザイナーではないので、ほとんど起こりません。
PatrykĆwiek2013年

Expression Blendを使用することはできますが、それはそれほど簡単なことではないと思います。開発者IMOよりもデザイナーの方が多いです。私は通常、プレビューをオフにしてxmlを操作します。
BlackICE 2013年

5
使用するのは難しくなく、慣れていないだけです。克服する最大のハードルは、2つのテクノロジー間のパラダイムシフトです。XAMLについての良い本を入手してください。XAMLに慣れると、デザイナーを使用することさえなくなります。XAMLを直接入力します。
slugster 2013年

3
@slugster、私はそれについて不思議に思った。HTMLでも同じことが起こりました...以前はdreamweaverでUIを作成していましたが、今では手動でHTMLをコーディングしています
Matthew Layton

回答:


175

私はWPFの初心者向けの記事についてブログを書くのが好きで、特に役立ついくつかの記事があります。

要約すると、WinformsとWPFの最大の違いは、WPFではデータレイヤー(DataContext)がアプリケーションであり、WinformsではUIレイヤーがアプリケーションであることです。

別の見方をすると、WPFではアプリケーションは作成したオブジェクトで構成され、テンプレートやその他のUIオブジェクトを使用して、WPFにアプリケーションコンポーネントの描画方法を指示します。

これは、UIオブジェクトからアプリケーションを構築し、必要なデータを提供するWinFormsの反対です。

このため、アプリケーションコンポーネントはコードで設計されているため、デザイナは実際にはそれほど使用されていません。デザイナは、データクラスを反映するユーザーフレンドリーなインターフェイスを描画するためにのみ必要です(通常Models、およびViewModels

個人的には、すべてのXAMLを手で入力することをお勧めします。それは、UIがどのように見えるかをプレビューするために時々デザイナーを使用しますが、それはドラッグ/ドロップWPFデザイナーが行うよりも速く、それほど混乱しないためです。お気に入り。

WinForms開発者に適した他のWPFデザイナーがあるかどうかについての質問に答えるために、別のデザイナーを探す代わりに、WPFの使用方法を学ぶことをお勧めします。WinFormsのようにWPFを使用すると、WPFの優れた点の多くを逃してしまいます。


14
@Rachelに完全に同意します。WPFの観点から見た最も重要な認識は、UIがデータはないことを理解し、それに応じて動作することです。
フェデリコベラサテギ2013年

2
@Rachel-悪魔の支持者を演じるだけ:UI(ウィンドウに表示されるボタン、テキストボックスなど)から始めて、アプリケーションを目的の操作に集中させることができます。残りは、それを実行する方法の実装の詳細です。
Asaf 2013年

3
@HighCoreは、stackoverflow.com / questions / 982978 / mvvm - for - winformsを見てください。Winformsは、ビジネスオブジェクトをユーザーコントロールにバインドできるビュー/ UIコンポーネントにすぎないことを認識しておく必要があります。OK:WPFはMVVMに適していますが、Winformsはそのようなデザインパターンでも機能します。そしてレイチェル氏は、「これは、UIオブジェクトからアプリケーションを構築し、必要なデータを提供するWinFormsの反対です」と述べています。とはいえ、それは真実ではありません。私はいつも少なくともデータとビューの方法で考えます。データとWinforms / WPF / HTMLなんでも。
ベルヌーイIT

2
それは少なくともデータ入力/変更のレベルでデータバインディングをサポートします。そして、開発者の99.9999999%は、私が疑っているWPFでも混乱するでしょう。しかし、この議論を終えましょう。WPFはMVVMおよび懸念の分離に絶対的により強力/適していますが、レイチェルとレイチェルはWinformsをマイナス面に追い込んだと思います。特にあなたが使う言葉を使い続けると...
ベルヌーイIT

3
@YoupTubeそうです、Winformsはデータバインディングをサポートしています。デフォルトのバインディングシステムが機能しない場合のために、独自のカスタムバインディングを作成することもできます。私はこの回答とブログ記事を初心者を念頭に置いて書きましたが、通常、初心者はデータオブジェクトではなくUIコンポーネントの観点から考えます。さらに、WinFormsでのバインディングは常に現在の状態で存在するとは限らなかったため、WinFormsで育った、またはバインディングを使用しない他のテクノロジーに慣れている多くの開発者は、切り替え時にこの重要な違いを識別できないことがよくあります。バインドされたアーキテクチャに。:)
レイチェル

9

まあ、同意しない人もいますが、VSデザイナーを使用しないこともお勧めします。少なくともインターフェースを作成しないでください。あなたがアプリケーションを起動せずに、あなたの実装の第一印象を取得したいことがあれば、少なくとも限り良い視聴者のようには洗練されたものないStylesし、Templates使用されています。ただし、IMHO、そのドラッグアンドドロップ結果はプロトタイプとしてのみ使用する必要があるため、不要になった場合は破棄してください。

使用しないことが重要ないくつかの理由を次に示します。

  1. VSデザイナーは、マージンと配置を修正して作業しています(レイアウトコントロールを使用している場合、通常は必要ありません)。つまり、要件が変更された場合、多くのコントロールを操作する必要があります。XAMLとWPFの仕組みに精通している場合は、ルックアンドフィールに関して、少ない労力で変更できるアプリケーションを作成できます。

  2. デザイナーがxamlを生成しているため、構成が最適ではなく、UIのパフォーマンスが低下する可能性があります。私はそれを測定しませんでした、それは単なる感じです。

はるかに優れた代替策はMS Blendですが、最初は他のすべてが簡単です。そのドラッグアンドドロップの結果は、VSデザイナーの結果よりもはるかに優れています。
しかし、これは非常に強力なツールであり、非常に強力な要素を使用して最先端のUIを作成するのに役立ちます。少なくとも短いワークショップに行って、その機会を理解することをお勧めします。

戻るあなたの質問、私見、私には自分自身に良い本などを取得、多くの人が同意すると思うWPFアンリーシュドを使用すると、より多くの詳細について知りたい場合は、後でおよびWPFプロ。とは異なる多くの機能がありますWinforms。デザイナーを使用してそれらを知ることはありません。それが最善のアプローチだと思います。

また、すでに一般的な問題をいくつか解決しているフレームワークとライブラリ(MVVM lightWPFToolkitなど)が多数あることも考慮してください。したがって、ホイールを再発明する必要はありません。


9

私はこれが古い質問であることを知っていますが、これを見ている他の人の利益のために、私はバランスを少し調整する必要があると思います-他のいくつかの答えを読むと、「デザイナーを使用しない'感情は、それを適切に使用しないことから生じます。 このチュートリアルは、他の投稿にある批評のいくつかに答えるのに非常に適しています。

たとえば、コントロールをドロップしたときにデフォルトであるWinformsのようなマージンベースのレイアウトから、右クリックして[レイアウトのリセット]を選択することで、よりWPF風のスタイルに切り替えることができます。

このビデオは同様の理由をカバーしています。

私は今でもVS2010デザイナーのバランスを好みます-VS2013は、TabItems **にドラッグアンドドロップするときに少しバグがあるようです(現在のプロジェクトではこれを頻繁に使用しています)。 、それは本当のプラスになることができます。

ただし、実際には、WPFとxamlを最大限に活用するには、デザイナービューとxamlビューの両方にある程度の知識があり、それらを切り替える必要があります。あなたがデザイナーから遠ざかると、あなたは多くのことを助けることができる何かを逃しています。

**編集-これはVS 2013のUpdate 3とVS14のプレビューで改善されたようですが、今までのところ私はまだ奇妙な動作をしています。


7

まず、Visual StudioデザイナーのWPF(XAML)では、常にxamlコードを使用してUIを構築し、コントロールをドラッグアンドドロップしないでください。コードをクリーンに保つ必要があります。Expression Blendを使用すると、ドラッグアンドドロップでグラフィック指向になりますが、無料ではありません。

これは大きな学習曲線ではありませんが、選択肢を探す代わりに、xamlを手動で実行する方法を学ぶべきだと思います。


1
ドラッグアンドドロップは問題ありませんが、入力を好む場合も問題ありません。手動で入力することがWPFのキーになることはありません。
David

3
WPFでドラッグアンドドロップすると、多くの場合、-1200のマージンがたくさんあり、そのようなことはまったく意味をなさないことがよくあります...私は常に手動で行ってきたので、確かに優れています
mlemay

1
これはトピック外です。あなた自身の問題だけでなく、すべての人にとって問題が当たり前のことであることを確認してください。また、何か問題があったとしても、ドラッグアンドドロップが悪いとは言えません。デザイナーに依存することは依然として必要であり、時には好意的ですが、デザイナーと開発者の両方が表現をどのように歓迎しているかを知っている場合、これは本当だと思うかもしれません。
David

1
はい、式のブレンドを使用すればOKですが、ビジュアルスタジオで話していました...
mlemay

12
Formsから来てWPFを起動してデザイナーを使用しないようにアドバイスするのは、本当に悪い考えだと思います。XAMLを理解する最も速い方法は、ドラッグアンドドロップを使用して、コードを観察することです。
Ucodia 2013年

7

私はあなたがしたようにこのプロセスを経てきました。その後、私の会社のWPFの全員に教えていました。私が学んだ重要な教訓がいくつかあり、WPFを使用している人は誰でも知っています。

  1. コードビハインドでUIコントロールを操作している場合は、....次に、それが間違っています。コードビハインドでUIコントロールを処理する必要はまったくありません。
  2. クリックするためのビジュアル開発者は必要ありません。XAMLのみを処理することで、生産性が大幅に向上します。コピー/貼り付けを使用します。タイピング機能を信頼しないでください。それは多くの頭痛を救うでしょう。
  3. XAMLは、データを見渡すウィンドウのようなものです。背後のコードでは、データを変更しています。XAMLでは、UIがデータを解釈する方法を定義します。
  4. コンバーターは素晴らしいです。重要な量のコンバーターを入手するとすぐに、生産性はSkyを飛躍的に高めます。それらは、非表示にしたり、サイズを変更したり、UIについてこれまでにない、膨大な数のコントロールイベントハンドラーの役割を引き継ぎます。

UI開発が楽しくなります。特に、Asycプロセスと一緒にプレイするのが好きな方法を見つけたら。それは本当にWinformsによって引き起こされた頭痛の多くを取り除きます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.