BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース WPF/Windowsフォームに関する.NET 5の大きな変更

WPF/Windowsフォームに関する.NET 5の大きな変更

原文(投稿日:2020/12/17)へのリンク

.NET 5 Breaking Changesシリーズの最後のトピックは、WPFとWindowsフォームである。このデスクトップテクノロジは.NET Core 3.0より前では利用できなかった。以前のバージョンの.NET CoreはASP.NET Coreを介したWebベースのアプリケーションに重点を置いていたためである。

非公式にWinFormsとして知られているWindowsフォームは、.NETが2002年に最初にリリースされたときの元のアプリケーションフレームワークの1つであった。(他のフレームワークはWebForms、コンソール、Windowsサービスであった。)WinFormsはVisual Basicの影響を強く受け、VBのようにネイティブWindowsコントロールの薄いラッパーとして機能する。これはデフォルトのケースでは、非常に優れたパフォーマンスを提供するが、カスタマイズにはかなり制限がある。一般的に言うと、開発者がOSに対してスタイリングなどのアスペクトを扱うことができるようにするものである。

WinFormsへの最初の大きな変更は2005年の.NET 2.0であった。これにより、基本的なデータグリッドを含め、Microsoftが不十分だと感じたさまざまなユーザコントロールに対する代替が導入された。それ以来、このテクノロジーは「完成」と見なされてきた。唯一の注目すべき変更は、より高いDPIモニターをサポートするための不定期の更新である。長い未解決のバグでさえ、通常は無視されていた。これは、新しい開発にWinFormsを使い続ける開発者にとって頭痛の種である。

Windows Presentation Foundation(WPF)は、完全にカスタマイズ可能なGUIフレームワークを作成するMicrosoftの最初の試みであった。WinFormsからわずか4年後にリリースされたが、デザインパターンとコンセプトがより複雑であったため、一般に受け入れられるまでにはしばらく時間がかかった。パフォーマンスも問題になる可能性がある。大規模なデータセットに対してWPFをWinFormsよりも大幅に高速化できる仮想化などの手法があるが、正しく使用するには、より深い知識が必要である。さらに、多くの開発者は、デフォルトのスタイルが「醜い」ため、カスタムスタイルが必要であると感じていた。

影響を与え続けたWPFの2つの重要な「機能」は、UIレイアウトにXAMLを使用することと、データバインディングにMVVMパターンを使用することであった。これらは、SilverlightやユニバーサルWindowsプラットフォームなどの他のイニシアチブに引き継がれた。

WinFormsと同様に、WPFは長年にわたって「完成」であると見なされてきた。2012年にXAML仕様がリリースされた後にもよらず、XAML-2009のサポートすらも取り上げられなかった。それに応えて、AvaloniaなどのプロジェクトはWPFの欠陥を改善しようと努めてきた。この例としては、イベントをモデルまたはビューモデルのメソッドに直接バインドできるようにすることが挙げられる。

新しいSDK

.NET Core 3.xでは、WPFとWinFormsにMicrosoft.NET.Sdk.WindowsDesktopというカスタムSDKが必要であった。.NET 5では、他の.NET 5プロジェクトと同じように、Microsoft.NET.Sdkを使用するようになった。ただし、ターゲットフレームワークはnet5.0でなくnet5.0-windowsとなった。

コンソール出力の抑制

WPFおよびWinFormsアプリケーションの大部分はコンソールウィンドウを表示しないが、実際には必要とされていない。これは単なるデフォルトである。追加の診断情報をこぼす場所が必要な場合は、OutputType WinExeではなくExe に設定できる。

.NET 5では、DisableWinExeOutputInference もtrueに設定しない限り、OutputType設定は無視される。

エラー処理の改善

エラー処理の修正でさえ、重大な変更をもたらす可能性がある。Windows Forms for .NET Core 3では、多くの検証コードが存在していなかった。つまり、無効な引数を渡した場合、NullReferenceException がスローされるか、不確定な方法で動作する可能性があった。

.NET 5では、適切なArgumentExceptionArgumentNullExceptionArgumentOutOfRangeException がスローされる。必須のプロパティが引数ではなくnullの場合、代わりにInvalidOperationException が使用される。

例外を適切に使用するコードを作成する方法の詳細については、「.NETでの例外を使った設計」を参照してください。

ステータスバーコントロールの削除

上記のWinFormsの歴史を取り上げた理由は、ステータスバーコントロールで何が起こっているのかを説明するためであった。.NET Framework 2で置き換えられたコントロールの1つは、質素なStatusBar.であった .NET 2に相当するものはStatusStripであり、すべての意図と目的に対して同じ動きをする。

Microsoftは、削除が必要な理由を説明していない。おそらく、ほとんどの人が存在すら知らないコントロールに対して、メンテナンスコストが高すぎた。StatusStrip は、デザイナーツールボックスに長い間表示されておらず、.NET5で完全に削除されている。

完全なシリーズ

この記事に星をつける

おすすめ度
スタイル

BT