今回は私が普段業務で使っているWPFを紹介します🤗
WPFとは?
Windows Presentation Foudationの略
Microsoftが提供するWindowsアプリケーション開発用のフレームワークです。
Windows Formsの後継といったところでしょうか。
XAML(ザムル)というXMLベースの言語でレイアウトを構築して、
中身の処理はXAMLとセットで作成されるxaml.csファイルで実装します。
(厳密にMVVMパターンを遵守する場合はxaml.csでないファイルに書くこともある)
例えば、アプリケーションを新規で作成するとMainWindow.xamlが作成されますが、
同時にC#を実装するMainWindow.xaml.csファイルも作成されます。
デフォルトのMainWindowにボタンを表示するとなると以下のような実装になります。
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="簡易ボタン" Height="200" Width="300">
<StackPanel>
<Button Content="クリックしてください"
Click="Button_Click"
Margin="10"/>
</StackPanel>
</Window>
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("ボタンがクリックされました!");
}
ここは任せて!
Windowsアプリケーションを作るためのフレームワークであることは理解いただけたと思いますが、「別にWindows Formsでよくない?」という方もきっといるでしょう…
なぜWPFを採用すべきなのか、まずはWPFの強みを紹介しましょう。
グラフィック性能と表現力
-
ベクターベースの描画
描画にはピクセルの集合体であるラスター形式ではなく、ベクター形式を採用しています。
点や線でグラフィックが構成されるため、拡大や縮小、回転も滑らかに実行できます。
-
Direct3Dによるハードウェアアクセラレーション
描画処理をGPUで行うため、CPU負荷が軽減され、高度な2D・3Dグラフィックスやアニメーションもスムーズに動作します。
ちなみに、ハードウェアアクセラレーションというカッコいい単語の意味は"コンピューターの処理を高速化するために、特定の処理をGPUや専用のハードウェアに任せる機能"のことです。
柔軟なUI設計とカスタマイズ性
-
XAMLによる宣言的なUI設計
先ほど触れましたが、デザインはXAML、ロジックはC#と完全に分離しています。デザイナーと開発者の分業も容易ですね。 -
柔軟なレイアウトシステム
GridやStackPanelを使って、複雑な画面構成も容易に実現できます。
ちなみに、Gridは行と列を宣言して任意の場所に配置できるやつで、StackPanelは複数のコントロールを多様な設定で並べることのできるやつです。
開発効率と保守性
-
データバインディング
UIとデータを自動で同期させてくれます。C#コードで管理しているデータの複雑な状態管理などが必要なく、画面への描画が可能です。 -
MVVMパターンのサポート
MVVMパターンで実装することが推奨されており、UIとロジックの分離が容易なため、保守性やテスト性の高いアプリケーションを構築できます。Prismなどのフレームワークと併用することでさらに強化されます。
ここはちょっと苦手…
WPFの得意なことをつらつらと書き殴ってきましたが、もちろん苦手なこと(デメリット)もあります。
学習コストが高い
XAMLやMVVMパターン、データバインディング、独自の概念等もあって学習コストが高めです。(私もよく業務中に頭も抱えております)
リソース集約型である
ハードウェアアクセラレーションを活用している一方で、メモリやCPU、GPUの消費が大きくなりがちです。古いPCやロースペックの端末においては真価を発揮できないこともあります。
アプリサイズが大きい
WPFアプリケーションはファイルサイズが大きくなりやすく、ダウンロードやインストール時に帯域やストレージの負担が増えるという懸念点があります。
クロスプラットフォーム非対応
Windowsアプリケーション専用のフレームワークなので当たり前っちゃ当たり前ですが、macOSやLinuxでは動作しません。普段私生活ではMacを愛用していますが、WPFを勉強しようと思ってもできません。(仕事で失敗したときの言い訳にはなりますね)
まとめ
ざっくりとWPFの選定ポイントをまとめました。
要件 | WPFの適性 | 代替技術例 |
---|---|---|
高品質UI | ◎ | Avalonia UI |
Windows専用 | ◎ | Windows Forms |
クロスプラットフォーム | × | MAUI/Electron |
低リソース環境 | △ | WinUI 3/UWP |
Web連携 | △ | Blazor/ASP.NET Core |
高品質のUIが求められるかつWindowsのみでの使用が確定しているアプリケーションには向いていると言えるでしょう。
ぜひ良いWPFライフを👏
参考