1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WPFのここがすごい!

Last updated at Posted at 2025-04-19

今回は私が普段業務で使っているWPFを紹介します🤗

WPFとは?

Windows Presentation Foudationの略
Microsoftが提供するWindowsアプリケーション開発用のフレームワークです。

Windows Formsの後継といったところでしょうか。

XAML(ザムル)というXMLベースの言語でレイアウトを構築して、
中身の処理はXAMLとセットで作成されるxaml.csファイルで実装します。
(厳密にMVVMパターンを遵守する場合はxaml.csでないファイルに書くこともある)

例えば、アプリケーションを新規で作成するとMainWindow.xamlが作成されますが、
同時にC#を実装するMainWindow.xaml.csファイルも作成されます。

デフォルトのMainWindowにボタンを表示するとなると以下のような実装になります。

MainWindow.xaml
<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>
MainWindow.xaml.cs
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ライフを👏

参考

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?