web-dev-qa-db-ja.com

Windows GUI:WPFまたはWinRT(2015+)

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

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

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

私の理解は、2015年にWindows Formsが完全に死んだということです。

この他のスタックオーバーの質問では、WinRT + XAMLはMetro GUIの構築用(Window 8タイルのことです!)、WPFはWindow 7/8のデスクトップにのみ使用され、Silverlightに密接に関連しているようです。

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

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

私の本当の質問は次のとおりです。WindowWorldにGUIを構築する良い方法はありませんか?

そうでない場合は、Windows 7、Window 8(デスクトップおよびメトロ)、Window Phone、(およびWindows 10!)、さらにはx-boxでもどのテクノロジーを使用する必要があります。

このように比較されるのは、さまざまなテクノロジーですか?

時間を投資するのに正しいことは何だと思いますか?

93
Alf Nielsen

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

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

何に時間を費やすかに関しては、それはあなたがターゲットにしているものに依存します:)。 WPF/UWP + XAMLを学習すると、.NET GUI開発の「最新」を維持したい場合に多くのメリットが得られます。 WPFにはほとんどの機能があるため、そこから開始することで、UWP(または他のXAMLベースの技術)に欠けているものに対する回避策を見つけるだけで済みます。

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

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

132
BradleyDotNET

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

第一に、もうWindows Formsから始めるべきではありません。今のところ最も成熟した技術ですが、Windows Formsの開発はこれ以上なく、現在はメンテナンス段階にあります。 WPFは積極的に開発されています(最後に読みました)。しかし今では、Windows Universal Apps(WinRT one)をフルスクリーンで使用する必要がなくなり、他のデスクトップアプリ(WPFおよびWinForms)と同じようにウィンドウモードで使用できます。これにより、タブレット以外のコンピューターでの操作性が大幅に向上します。これもデスクトップアプリの未来になると思います。ただし、WPFソフトウェアは従来のデスクトップアプリです(アクセス許可はなく、UACのみ)。いずれにせよ、WPFまたはWinRT(.Netを使用)開発を学んでも、両方を学ぶことになります。どちらもXAML + C#(または他の.Net言語)です。 WinRTがWindows 8で登場したとき、私はちょうどWPFを学んでいました。すぐに慣れる小さな変更点はほとんどありません。ただし、WinRTのMVVMシナリオ(データバインディング)についてはわかりません。私はまだ自分でWPFのその側面を学んでいます。

ウィンドウ10が起動しました。 Windows 8/8.1はWindows 7ほど成功していませんでした。したがって、より多くのユーザーを対象とするアプリを構築する場合は、今のところWPFを使用する必要があります。しかし、近い将来、WinRTが道を開くでしょう。

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

26
Prateek Jain

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

Windowsフォームは完全に死んでいますか?

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

22
Tomáš Opis

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

16
Gareth

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

個人的には、サンドボックス化された(クイックサンド?)UWPビジネスモデルが恐ろしいと感じています。これは、Windowsが最初から支持していたオープン性に反します。

5
Jeroen S

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

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

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

Steam Hardware Survey data を見ると、この回答を書いている時点(2017年7月)で、Windows 10 64ビットが50%の市場シェアを占めるPCゲームプラットフォームとなり、Windows 7 64ビット(32%)およびWindows 8.1 64ビット(ほぼ7%)。他のすべてのOSプラットフォームの市場シェアは非常に小さいため、これら3つ以外のものを考慮する価値はほとんどありません。

それが現在のPCゲームの状態であるため、WinFormsは3つのトップPCプラットフォームすべてをターゲットとする最も一般的な分母です。将来に目を向けると、Windows 7と8がWindows 10で大きな市場シェアを失うため、UWPはc#ゲーム開発の最適なターゲットプラットフォームになります。だからそれは数字だけです。

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

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

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

4
Mike Johnson

WinRTはデスクトップ上で長い間使用されてきました。WinRTを書いています。これはdeskopで実行されます。また、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はスタートメニューのことだと言っているようなものです。あなたはその文がどれほどばかげているかを見ることができます。

3
Gavin Williams

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

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

MVVMパターンに従うことにより、WinFormで比較的簡単なことをWPFで行うのが非常に難しくなることがわかります。更新後のある条件に基づいてセルの色を設定したり、ビュー内の行をスクロールして強調表示したりします。

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

2
Jason Ching

私は1年前にこの質問に遭遇しました。私は、XAML、WPF、WinRTが最初から正しい開発環境であるという結論に達しました。

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

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

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

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

1
Khamis