Windows GUI:WPFまたはWinRT(2015以降)


94

私は、Windowsの世界でGUIを構築するときに使用するさまざまなテクノロジーの概要を取得しようとしています。

コンテキストとして、私は少し2Dプラットフォームのマルチプレイヤーゲームを構築しています。(学習目的のためだけに..)

私の先生は、WPFは正しい方法だと思っていますが、Windowsフォームとしか比較していないようです。

私の理解不足は、ここ2015年にWindowsフォームが完全に死んでいるということですか?

この他のスタックオーバーの質問では、WinRT + XAMLはMetro GUIのビルド(ウィンドウ8タイルのこと!)

Windows 8ランタイム(WinRT / Windowsストアアプリ/ Windows 10ユニバーサルアプリ)は、SilverlightやWPFと比較してどうですか。

  • デスクトップは、古いアプリが存在する場所です(赤。WFP)。
  • 新しいクラスのアプリケーションであるMetroアプリケーションは、VB.NET、C#、C ++など、さまざまな方法で構築できます。これらの3つの言語オプションは、UIを構築するためにXAMLを使用できます。もう1つの方法は、UIとアプリケーションコードの両方の開発にJavaScript / HTML5 / CSSを使用することです。

私の本当の質問は次のとおりです。ウィンドウの世界でGUIを作成するための良い方法はありませんか?

そうでない場合は、Window 7、Window 8(デスクトップおよびメトロ)、Window Phone(およびWindows 10!)、さらにはx-boxでどのテクノロジを使用すればよいでしょうか。

この方法で比較するのは異なるテクノロジーですか?

時間を投資するのに適切なことは何だと思いますか?


5
「WPFまたはWinRT?」デスクトップ用のWPF、モバイルデバイス用のWindowsランタイムの両方について学びます。これらのテクノロジーには、XAMLや非常に類似したフレームワークなど、多くの共通点があります。ポータブルクラスライブラリとして、両方のプラットフォームをサポートするコードを書くこともできます。
クレメンス

2
@クレメンス最後のビットは少し誤解を招くです。標準の.NETライブラリは、WinRTアプリで動作するように再構築または対象指定する必要があり、特定のクラスのコード変更が必要になる場合があります。
BradleyDotNET 2015

3
Windowsフォームは完全に機能しているわけではありませんが、すでに慣れている場合を除いて、使用したくないと思います。
ケーシー

2
「Windows GUIを最新の状態に保つ」というあなたの目的は、私の意見ではかなり有害です。長期的に見れば、平均的な開発者にとって、これにはほとんど未来がありません。MSはGUI用のツールを何度も変更しましたが、JavaScriptとHTML5はその地位を維持し続けました。あなたが生きるために開発しているなら、他のすべてを忘れてください。MSやGUIのサードパーティベンダーで働いている場合や、古いコードを維持することに意欲がある場合は、これに対するいくつかの例外があります。
NoChance 2017年

3
MFCでさえ完全に死んでいるわけではなく、Win32でもありません。しかし、ゲームのMFCは、狂人が選ぶものです
Lothar

回答:


132

ここにはたくさんありますが、ここに行きます:

  • Windowsフォーム(Winforms)は死んでいますか?いいえ、まだ積極的にサポートされています。とはいえ、それは恐ろしいことですいえ、動作テクノロジーです(少なくともWPFの魔法を知っていれば)
  • 見栄えがよく、よく設計されたデスクトップ(Metroではなくクラシック)アプリを構築したい場合、WPFは純粋な.NET用語での答えです。あなたはすることができます(たとえば、そのソケットクラスなど)WinRTのAPIを使用しますが、Windows 8. UIはまだWPFである前に、あなたはOS上でそれらを実行することはできません。
  • WinRTアプリはWindows 8ストア用です(Windows 10ストアでも入手できます)。ここではWPF、またはデスクトップ上のWinRTは使用できないため、どこに配置するかによって使用するものが決まります。利用可能な言語/技術についての理解が正しい。
  • Windows Phone 8(非推奨)は、WinRTの変更されたランタイムを使用します(これはWindows 10で変更されました)。Win8 / WP8の場合、「ユニバーサル」アプリを使用してほとんどを共有できます、標準のWinRTアプリとWindows Phoneアプリの間でのコードできます。
  • Windows 10は、.NET Coreに基づくユニバーサルWindowsプラットフォーム(UWP)を使用します。Windows 10用に開発されたコードは、Xbox One、Windows Phone 10、およびHoloLensでも使用できます。WPFは「標準」デスクトップアプリ用です。
  • XBoxはトリッキーです。XNAは廃止され、Microsoftはプラットフォーム用にコミュニティが作成したコンテンツを廃止するようです。そうは言っても、Unity3DはXBoxにデプロイでき、標準のDirectX(C ++)開発がそれで機能すると私は信じています。ユニバーサルWindowsプラットフォームアプリはXbox Oneにも展開できます。これは今後のMicrosoftの戦略のようです。

何に時間を費やすかということに関しては、それはあなたが対象としているものに依存します:)。WPF / UWP + XAMLを学ぶことは、.NET GUI開発で「最新の」状態を維持したい場合に多くの利点をもたらすので、それが目的です。WPFはほとんどの機能を備えているため、そこから開始することで、UWP(またはその他のXAMLベースの技術)に欠けているものの回避策を見つける必要があります。

その場合は、MVVM(Model-View-View Model)パターンを必ず学んでください。これは、XAMLベースのテクノロジと非常にうまく連携し、WPFアプリケーションとUWPアプリケーションの間で多くのロジックを共有できるようにします。最終的にiOS / AndroidなどのXamarinアプリケーションを開発する場合も、同じロジックを使用できます。

真のゲーム開発には、実際のゲームフレームワーク(Unity3DやXNAなど)が必要になることに注意してください。これはWPFで実行でき、Winformsよりも優れた選択肢ですが、どちらもゲーム向けではありません。


答えてくれてありがとう、私はXNAから始まったミニゲームを持っているので、彼らがそれを削除するのを聞いて申し訳ありません。しかし、私はWindows 10が何をもたらすかを楽しみにしています。
Alf Nielsen

@AlfNielsenサポートがいつ終了するかはわかりませんが、すぐに更新される予定はないようです。
BradleyDotNET 2015

2
VSはUnityの完全サポートを予定しているようですので、それを予測することを歓迎します!:)
BK

2
VisualなどのWPFクラスを使用したWPFレンダリング速度は、ゲームやリアルタイムのあらゆるものにとって恐ろしいものです。
Winger Sendon

2
@WingerSendonを見RenderTransformViewport3Dなどが挙げられます。それらはハードウェアアクセラレーションです。
BradleyDotNET 2016

26

それはかなり古いスレッドですが、(興味のない)googleを介してこれに遭遇したように、おそらく他の誰かもここに到達する可能性があります。これは、新しいプログラマーから何度も尋ねられる質問です。Windows 10が正式にリリースされたので、私もいくつか答えたいと思います。

まず、Windowsフォームから始める必要はもうありません。現在のところ、これは最も成熟したテクノロジですが、Windowsフォームの今後の開発は行われず、メンテナンス段階にあるだけです。WPFは積極的に開発されています(最後に読んだもの)。しかし今では、Windows Universal Apps(WinRT one)を全画面で使用する必要がなくなり、他のデスクトップアプリ(WPF&WinForms)と同じようにウィンドウモードで使用できます。これにより、タブレット以外のコンピュータでのユーザビリティが大幅に向上します。これはデスクトップアプリの未来にもなると思います。ただし、WPFソフトウェアは従来のデスクトップアプリです(権限はなく、UACのみ)。どちらの方法でも、WPFまたはWinRT(.Netを使用)の開発を学習しても、最終的には両方を学習することになります。どちらもXAML + C#(または他の.Net言語)です。WinRTがWindows 8で登場したとき、私はちょうどWPFを学んでいました。すぐに慣れることができる、ほんのわずかな変更点だけを自宅で感じました。ただし、WinRTのMVVMシナリオ(データバインディング)については不明です。私はまだ自分でWPFのその側面を学習しています。

Window 10がリリースされました。Windows 8 / 8.1はWindows 7ほど成功しませんでした。そのため、より多くのユーザーを対象とするアプリを構築したい場合は、今のところWPFを使用する必要があります。しかし、近い将来、WinRTが進むべき道になるでしょう。

Window 7、Window 8(デスクトップとメトロ)、Window Phone(およびWindows 10!)、さらにはx-boxでどのテクノロジを使用すればよいか」という質問に対して、単一の答えはWindows Universal Appsです。これが、このフレームワークが開発されたまさにその理由です。すべてのデバイス用のアプリの開発に使用される1つのテクノロジー。デスクトップ、タブレット、電話(Visual Studio 2015にバンドルされているXamarinを使用するAndroidを含む)、Xbox、およびIoT(モノのインターネット)。


19
ユニバーサルアプリはWindows7またはWindows8では動作しないようです。「ユニバーサルアプリ」は、Win10デバイスにのみ「ユニバーサル」です。
Dragontamer5788

Xamarinはまだ独自のもの(ユニバーサルアプリなし)であり、Xboxに展開できるかどうかはわかりません。
BradleyDotNET

2
@PrateekJain:Windows 8でUWPアプリを実行する場合はNO: stackoverflow.com/a/30317960/199364
ToolmakerSteve

6
WinFormsは、使いやすく汚れたGUIでも優れています。WPFは優れていますが、MVVMがなくても「正しく」使用するには多くの定型コード(および急な学習曲線)が必要です。WPFには本当のRAD機能がないこと、そしてXAMLが非常に冗長になっていることは残念です。

1
私のarseのすべてのデバイス。それは最高の状態で再びマイクロソフトが話します。Windows 95とWindows 2000で実行されていたため、クロスプラットフォームと呼ばれていた昔のように。もう1つは、デスクトップアプリに、醜いサイズのボタン、特にタッチに使用する必要のあるツリーとリストを表示したくないということです。これは私にとってUWPがない
Lothar

23

私はあなたの質問の1つだけに答えようとします:

Windowsフォームは完全に機能しなくなっていますか?

いいえ、Windowsフォームテクノロジーは死んでいません。理由をお話します。WPFとXAMLは非常に包括的で複雑なテクノロジーであり、非常に優れたUIを構築できます。だが!このテクノロジーには深い知識が必要です。基本的なレイアウトの場合はそれほど知識は必要ありませんが、高度なレイアウトの場合は深い知識が必要です。このテクノロジーを使い始めて、Googleでいくつかのヒントを探すのに多くの時間を費やしたときです。したがって、ユーザー入力にいくつかの単純なフォームが必要な場合は、常に非常に単純で単純なWindowsフォームテクノロジを選択しています。これは、このテクノロジーが世界に出て非常に成功した理由でもあります。WPFを開始するときは、MVVM設計パターンとは何かを知る必要もあります。経験の浅いプログラマーの中には、混乱している人もいます。


3
これが私のお気に入りの答えです。小さなアプリの場合、Windowsフォームを使用します。これは、すばやく簡単に実行できるためです。複雑なプロダクションコードでは、C ++(WTLを使用)と.NETを完全にサイドステップで使用します。
ロビンソン

8
WPFに精通していない読者のために、いくつかの説明があります。基本的なアプリケーションレイアウトでは、WPFはほぼ同じ量の労力を必要とします。デフォルトのVS WPFアプリケーションテンプレートは、WinFormsと同じ出発点を提供します。MVVMはWPFでの動作に必須ではありませんが、実際のMVVMフレームワークなしでBindingを使用することも、単純なアプリでは簡単です。WPFは技術的にWinRTおよびUWPに近いため、Windowsフォームがレガシーアプリケーションを維持する以外の目的で機能していないと自覚してください。
あまりにも

3
Winformsは、新しい時代の「コンソール」アプリを構築するのに最適です。たとえば、通常はコンソールアプリとなるものにスキンを効果的に配置する一連のボタンとユーザー入力を備えた非常に基本的なタブコントロール。
ロール

16

それは今2016年4月であり、これに対する明確な答えはまだありません。私たちは、テキストや他のさまざまなグラフィックと混合された複数のチャートやディスプレイをレンダリングする必要がある、非常に最新のリアルタイムパフォーマンス監視デスクトップアプリケーションを開発しています。アプリケーションはC#、. NET Framework 4.5.2のWPFですが、許容できるパフォーマンスを得るために、WinFormsとGDI +を使用していくつかのコンポーネントを作成しています。WPFでそれを達成していないだけです。DirectXを使用して、アプリケーションにいくつかのディスプレイを開発しましたが、これにより、ほんの一部のチームしかサポートできない複雑さが追加されます。WPF内でWinFormsディスプレイをホストすることで得られるシンプルさと純粋な速度、およびGDI +の速度は、さまざまな空域の問題に対処する必要があるとともに、純粋なView / ViewModel構造のコストで必要なものを提供します。私たちのアプリケーションはかなり専門的で、WinFormsを完全に削除したいのですが、残念ながらこれはまだ私たちのケースでは不可能です。純粋なパフォーマンスを得るには、DirectXまたはWinFormsを使用する必要があります。


1
WinFormsの方がパフォーマンスが高いものがあることをお伝えします。逆が当てはまる他の事柄(特にアニメーション)があります。確かに、DirectXに直接進むのはおそらくもっと良いでしょうが、あなたが指摘したように誰もこれをやりたくないのです。
BradleyDotNET 2016

1
WinRTの後、私は他の場所を探し始めることにしました。クライアントと私は、マイクロソフトとクライアントの最終的な利益に影響を与えるため、マイクロソフトが望むものにあまり頼りになりません。私は現在、ローカルWebサーバーを使用して、アプリケーションページをユーザーのブラウザーまたはWinForm / WPFアプリの埋め込みブラウザーコントロールにローカルに提供するセルフホスト型アプリケーションを見ています。これにより開発が簡素化され、プラットフォーム間の互換性が向上し、明らかにコストが削減されます。
TheLegendaryCopyCoder 2017

6

私の2セント...真のユニバーサルアプリ、つまりWindowsを含むすべてのデスクトップオペレーティングシステムで実行できるプログラムが必要な場合は、WinFormsを使用することもできます。CLR互換性を維持し、Mono経由でMacとLinuxにデプロイできることを確認してください。大きなメリット。XAMLはすばらしいかもしれませんが、他のオペレーティングシステムに移植されることはありません。

個人的に、サンドボックス化された(quicksanded?)UWPビジネスモデルは恐ろしいものです。これは、Windowsが当初から存在してきたオープン性に対抗しています。


4

私は10年以上マイクロソフトテクノロジを使用しています。私が学んだ最も重要なことは、マイクロソフトが提供しているものに耳を傾けることではありません。Microsoftがこれが未来だと言っているとき、それは失敗する可能性が50%あります。マイクロソフトは投資した製品を宣伝するために最善を尽くしますが、それはあなたが従うべきだという意味ではありません。WCFとSilverlightがどうなるかをご覧ください。

WPFは非常に優れた学習プラットフォームですが、学習曲線は非常に大きくなります。5年未満のプログラミング経験を持つ開発者がWPFを正しく実行できるとは思いません。

MVVMパターンに従うと、WinFormで比較的簡単なことを行うことがWPFで非常に困難になる場合があります。更新後の条件に基づいてセルに色を付けるようにしたり、ビューの行をスクロールしてハイライトしたりします。

もちろん、MVVMを実行する必要がないと言うこともできます。コードをコードビハインドに配置して機能させるだけです。はい、うまくいきますが、WPFを使用する意味は何ですか?なぜWinフォームを使用しないのですか?


1
WPFは学習曲線が非常に強いことに同意しますが、それを乗り越えると、WinFormsに戻ることはありません...
Krythic

4

これは古いスレッドですが、.NETフレームワーク、c#機能の現在の進歩、およびゲーム開発の選択肢としてのc#への注目が高まっている重要なスレッドです。

WPFが正直なところ、c#ゲームプラットフォームとして選択されることはほとんどありません。WPFの空域の問題は、人々を非常に早く怖がらせました。このため、メジャータイトルやメインストリームゲームエンジンの多くが(ターゲットプラットフォームとして)WPFをサポートしているとは思えません。ただし、WPFはゲームランチャーの優れたプラットフォームになります。

WinFormsは、現在メンテナンスモードにありますが、今後数年間は有効な選択肢です。実績があり安定しています。私が見てきたように、2017年でさえ、WinFormsは依然としてc#ベースのゲーム開発に選択された最も一般的なプラットフォームです。

Steamハードウェア調査データを見るは、Windows 10、64ビット、64ビット、32%で今のWindows 7に続いて、50%の市場シェアで支配PCのゲームプラットフォームであり、この答え(2017年7月)を書いている時点でそれを見ることができますWindows 8.1 64ビットでほぼ7%。他のすべてのOSプラットフォームの市場シェアは非常に小さいため、これら3つ以外を検討する価値はほとんどありません。

これがPCゲームの現状であり、WinFormsは3つのトップPCプラットフォームすべてを対象とする最も一般的な特徴です。将来を見ると、UWPは、c#ゲーム開発の最適なターゲットプラットフォームになるでしょう。Windows7および8は、それに代わる新しいプラットフォームが登場しない限り、Windows 10に対して大きな市場シェアを失うからです。したがって、それは数字によるものです。

最大の市場シェアをサポートするのではなく、OSプラットフォームごとの最高レベルの互換性に基づいて選択する場合、選択肢は次のようになります。

  • Windows 10:UWP
  • Windows 8.1:WinRTまたはWindowsストア
  • Windows 7:WinForms

他の回答のほとんどは、標準のWindowsアプリケーション開発を中心としていますが、ゲーム開発は非常に異なる領域であり、ターゲットOSやグラフィックAPIまたはゲームエンジンの選択が実際に最もよくサポートするものなど、さまざまな要因が選択に影響します。


gamedevの見方が興味深いのですが、UnityのようなC#向けのフル機能のゲームエンジンがあるgamedevのGUIフレームワークを選ぶ理由がわかりません。クラシックGUIを使用して見たゲームは、ゲームデータエディション(マップ/アセットの編集など)
のみでした

2
同じ理由で、彼らはゲームエンジンを選択します。自分でマネージコードからネイティブウィンドウを効果的に作成および管理するのはかなりの作業です。
マイクジョンソン

3

WinRTは長い間デスクトップ上にありますが、私はWinRTを作成しています。これは私のデスクトップで実行されます。また、Windows 10では、これらのアプリケーションはドッキングされていない場所をサポートします(ウィンドウは従来から知っているようにウィンドウ表示されます)。

今日から始める人には、WinFormsやWPFはお勧めしません。彼らは主にWinRT / XAMLを学ぶべきです。また、選択した言語に応じて、必要に応じてWin32 / .netを学習します。

「WinRT + XAMLはMetro GUIのビルド(ウィンドウ8タイルのことです!)向けだと言っています」-これはあまりにも抽象的すぎて、役に立たない。WinRTは、Win32と同様にランタイムであり、GUI専用ではないため、「彼らが言うこと」は完全なBSです。XAMLはUIレイヤー(WPFのXAMLによく似ています)ですが、Metro GUIも間違っていると言って、Metro GUIのようなものはもうありません。XAMLはWindows UIレイヤーです。そして「Windows 8タイルのこと!」特定の人々のトンネルのビジョンを表現しています。Win32はスタートメニューのことだと私が言っているようなものです。その文がどれほどばかげているかがわかります。


8
私の元のステートメントを明確にするために、WinRTを使用して「従来の」デスクトップアプリケーションを作成することはできません。そのため、とりわけ、WPF(WinForms、それほど多くはありません)を学ぶ理由はたくさんあります。他に何もなければ、WinRTを同時に効果的に学習したことになります(私の回答で述べたように)。さらに、WinRTアプリが市場を支配するポイント(特に基幹業務アプリ)に近づくことはできません。WPFは依然として非常に貴重です。
BradleyDotNET 2015

7
WinRTがフルスクリーンアプリのビルドに関連付けられていない場合、WinRTを使用して、実際にリリースされたバージョンのWindowsで実行されるウィンドウ付きアプリを作成する方法を教えてください。または、それを使用して、Windowsコンピューター(つまり、Windows 7およびXP)の10%以上で実行されるアプリを作成する方法を教えてください。私は、ほとんどの開発者がWindowsユーザーの10%以上をターゲットにできることを望んでいると思います。Windows 8または10がかなりの市場シェアを獲得するまで、WPFは多くのアプリケーションで必要となるでしょう。WinRTはランタイムレイヤーである可能性がありますが、Win32がアクセスできる(完全な)ものの多くにアクセスできないという事実は変わりません。
John Colanduoni、2015

1
@JohnColanduoniが言ったように、今日(Mar14)を開始するすべての人にとって、WinRTは先に進む道であり、win10は今から数か月間はアップデートとして無料であり、あと数か月間無料になるので、はい、win10は巨大な市場シェア。はい、誰もがwin10に移行したわけではありませんが、数日前にフランスの空港でも引き続きwin3.1を使用していることがわかりました
John Demetriou

3
@GavinWilliamsわかりました。Windows10を市場セグメントでかなりの市場シェアにした統計はどこにありますか?あなたのモッドはあなたのソースへのリンクを含むあなたのコメントを削除したと言っていますが、彼らはあなたにこれを置くことを許しましたか?私はそれを買っていません。それは窓が普遍的正当化することが必要であり、そしてどこだけでWindows 7の導入はどこにもありませんしましょう、私はXPをサポートし価値がない同意するが、Windows 10のユニバーサルアプリケーションでもWindowsの8.1をサポートしていません、それは減速しています
John Colanduoni、2015

3
@GavinWilliamsさて、30%は97%よりはるかに小さい(WPFを使用した場合に得られるサポート)こと、およびこのデータはビデオゲームプログラマーにのみ役立つことを無視しましょう。ビデオゲームの場合、両方をターゲットにするのはとても簡単です。些細なことをしているのでない限り、DirectX / OpenGLを使用することになります。つまり、ウィンドウ/フルスクリーンでホストする必要があるだけです。それらを使用したくない場合は、WinRTのUIではホストされたDirectX / OpenGL(WPFのように)なしでイミディエイトモードの描画ができないため、WPF が本当に必要になります。では、WinRTは市場規模を70%縮小することを正当化するのでしょうか。
John Colanduoni、2015

1

1年ほど前にこの質問に遭遇しました。私は、XAML、WPF、WinRTが適切な開発環境であるという結論に至りました。

データレイヤー(WebサービスとRESTfulレイヤー(JSON)を含む)に.Net Frameworkを使用し、Webプレゼンテーションレイヤーに純粋なHTML5 / CSS3とJavaScriptを使用することを強くお勧めします。

Windows 10内では、任意のWebアプリケーションをそのままメトロアプリケーションとして統合できます。

WinRT、XAML、WPFおよび同様のmsのものはWindowsでのみ実行され、多くの制限があります。

そのため、1年後も、WinRTまたはXAMLを新しいプロジェクトに使用しないという私の決定にはとても満足しています。


3
あなたは何について話していますか?はい、Webアプリを作成する場合に最適です。デスクトップアプリを作成する場合は、そうではありません。Katanaを使用し、ローカルでホストされているWebApiを使用してデスクトップアプリを作成できます。
ケーシー

1
OPは、Webアプリではなく、Windows GUIおよびWPFまたはWinrtについて尋ねました。
ezaspi 2016

6
また、個人的には、これらのテクノロジーを操作するのがはるかに難しいと感じています(理解できないレイアウトシステム、コードのコンパイル時チェックがないなど)。デスクトップはまだ死んでいません:)
BradleyDotNET

1
HTMLはユニバーサルUIであり、デスクトップ用でもあるはずです。これらのさまざまなフレームワークをすべて簡素化し、ますます導入を停止する必要があると感じています。そのほとんどは必要ありません。HTMLとASPを学び、WinFormアプリでWebサイトをセルフホストします。WinFormアプリには、WebサーバーおよびWebブラウザーコントロールが含まれています。その結果、時間を節約し、1つの言語と技術を習得することに集中し、開発を迅速化し、クライアントの費用を節約し、アプリは将来を見据え、移植性が大幅に向上します。
TheLegendaryCopyCoder 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.