はじめに
WPF は Microsoft の Windows Presentation Foundation の略称であり、WinForms は Windows Forms Applications を単純に組み合わせたものです。どちらも Microsoft の Windows アプリケーション向けグラフィカルユーザーインターフェイスであり、開発者はこれらを使用して Windows デスクトップアプリケーションを開発できます。本稿では、Windows デスクトップアプリケーションを開発するための 2 つの方法の主な違いに焦点を当て、現代のシステム開発においてどちらがより有用かを説明します。
Windows Forms
WinForms は 2002 年 2 月に .NET Framework の一部として導入されました。主に、WinForms は開発者が Windows フォーム上にコントロールをドラッグアンドドロップし、C#、VB.NET、その他の .NET 言語で記述したコードビハインドファイルを使用してこれらのコントロールを操作できるようにします。各 WinForms コントロールはクラスのインスタンスであり、WinForms は一連の C++ クラスをラップしたものとして存在します。Microsoft の Visual Studio により WinForms の開発は容易になり、開発者はツールボックスから簡単にコントロールをドラッグアンドドロップできます。
WinForms のツールボックスにあるコントロール:

WinForms デスクトップアプリケーションでは、開発者はコントロールイベントを操作できるコードビハインドファイルのみにアクセスできます。WinForms デスクトップアプリケーションは、コントロールの機能とアプリケーションの動作に制限があり、これについては次のセクションで明らかにします。
WPF デスクトップアプリケーション
WinForms とは異なり、WPF のアーキテクチャは 3 つの主要コンポーネント (プレゼンテーションフレームワーク、プレゼンテーションコア、MIL コア) で構成されています。WPF は標準 Windows コントロールに完全に依存しておらず、したがって独立した方法です。2007 年、Microsoft は .NET Framework デスクトップアプリケーション開発において WinForms に代わるものとして Windows Presentation Foundation (WPF) を導入しました。この代替により、デスクトップアプリケーション開発に多くの変化がもたらされました。まず、WPF はデザイナーとプログラマーを分離します。UI は Visual Studio または Blend を使用して個別に設計でき、開発者はコードビハインドファイルを使用してコントロールイベントを操作できます。
WPF は XAML を使用してコントロールを作成し、そのファイル構造は ASP.NET に似ています。デザイナーを使用するか、XAML コードを記述してコントロールを作成できます。Canvas パネルを使用するデザイナーは、WinForms のように Windows ページ上にコントロールをドラッグアンドドロップすることもできます。WPF がもたらす主な違いは、XAML ファイルと、XAML ファイルに付随するビジュアルデザイナーへのアクセスです。
WPF のビジュアルデザインと XAML ファイルの編集:

上の図は WPF アプリケーションのレイアウトを示しており、デザイナーと共に XAML ファイルが表示されています。
WPF プロジェクトのファイル構造は次のとおりです:

- 各ウィンドウまたはページには、コントロールを追加するための .xaml ファイルと、コードビハインドファイルである .cs、.vb などのファイルがあり、ASP.NET 方式に似ています。
- WinForms とは異なり、WPF はアプリケーションを起動するための初期 MainWindow を生成します。起動ウィンドウを変更するには、App.xaml ファイルで行います。
WPF のメインフォーム起動構成:

- このファイルはアプリケーションのエントリポイントとして機能します。
WPF と WinForms のもう 1 つの顕著な違いはコントロールです。コントロールを追加するには、簡単な XAML コードを記述するだけです。たとえば、WPF ウィンドウにテキストボックスを追加するには、次のようにコードを記述します。
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
Height="450"
Width="800"
>
<StackPanel>
<TextBox></TextBox>
</StackPanel>
</Window>
構文内のマークアップに注意してください。これは「拡張アプリケーションマークアップ言語 (XAML)」という名前を示唆しています。XAML コードは Window タグ内に配置されます。コントロールタグには、コントロールに応じて幅、高さなどを記述する属性がある場合があります。
WPF は WinForms とのもう 1 つの顕著な違いももたらします。それは、画像を含む Button を追加できることです。WinForms では、ボタンに画像を追加するには画像を自分で描画するか、サードパーティのコントロールを含める必要がありましたが、WPF のボタンコントロールはシンプルで、任意のコンテンツを追加できます。
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
Height="500"
Width="800"
>
<button Padding="5">
<StackPanel Orientation="Horizontal">
<image Source="/Image.jpg" Height="25" Width="50" />
<TextBlock Margin="5,0">I'm a Button</TextBlock>
</StackPanel>
</button>
</Window>
出力は次のようになります: WPF 実行デモ

WPF は、次の例に示すように、完全にサポートされたデータバインディング機能も提供します。
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
Height="500"
Width="800"
>
<StackPanel Margin="10">
<WrapPanel Margin="0,10">
<label Content="Your Text Here:" FontWeight="Bold" />
<TextBox
Name="txtBind"
Height="20"
Width="250"
RenderTransformOrigin="-2.75,0.587"
Margin="59,0,336,0"
/>
</WrapPanel>
<WrapPanel Margin="0,10">
<TextBlock Text="Bound-Text: " FontWeight="Bold" />
<TextBlock Text="{Binding Path=Text, ElementName=txtBind}" />
</WrapPanel>
</StackPanel>
</Window>
出力: WPF データバインディングデモ

上記の例の 属性は、<TextBlock> 内のテキストを txtBindTextBox 内のテキストにバインドするために使用されています。これは、 属性を使用して WPF でデータをバインドすることがいかに簡単かを示しています。
結論
本稿では、デスクトップアプリケーションを作成する 2 つの .NET 方式のアーキテクチャ、構文、ファイル構造、アプリケーション動作の違いを通じて、WinForms と WPF の主な相違点を示しました。WinForms の設計は一見親しみやすく直接的に見えますが、XAML は開発者が現代のデスクトップアプリケーションで必要とする可能性のある便利な機能をもたらします。
原文リンク: https://www.c-sharpcorner.com/article/wpf-vs-winforms/