WPFとWinformsの違いをご存知ですか?

WPFとWinformsの違いをご存知ですか?

Windowsデスクトップアプリケーションを開発するための2つの方法の主な違いを紹介します。これらは、最新のシステム開発においてより効果的に機能します。

最終更新 2021/04/07 23:59
沙漠尽头的狼
読了目安 4 分
カテゴリ
WPF Winform
タグ
.NET C# WPF Winform

はじめに

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 デスクトップアプリケーションでは、開発者はコントロールイベントを操作できるコードビハインドファイルのみにアクセスできます。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 ファイルが表示されています。

WPF プロジェクトのファイル構造は次のとおりです:

WPF プロジェクトのファイル構造

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

WPF のメインフォーム起動構成:

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 実行デモ

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 データバインディングデモ

WPF データバインディングデモ

上記の例の 属性は、<TextBlock> 内のテキストを txtBindTextBox 内のテキストにバインドするために使用されています。これは、 属性を使用して WPF でデータをバインドすることがいかに簡単かを示しています。

結論

本稿では、デスクトップアプリケーションを作成する 2 つの .NET 方式のアーキテクチャ、構文、ファイル構造、アプリケーション動作の違いを通じて、WinForms と WPF の主な相違点を示しました。WinForms の設計は一見親しみやすく直接的に見えますが、XAML は開発者が現代のデスクトップアプリケーションで必要とする可能性のある便利な機能をもたらします。

原文リンク: https://www.c-sharpcorner.com/article/wpf-vs-winforms/

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2022/04/07

WinformとWPFの違いは何ですか?

「WinFormとWPFの違いは何ですか?」とよく聞かれます。 この質問は簡単そうに見えますが、体系的に分析したことはありません。今日は時間を作って、私個人の見解をまとめた記事を書きました。

続きを読む
同じカテゴリ / 同じタグ 2022/04/04

すごい開発者が WinUI 3 と WPF で作ったオープンソースの動的壁紙ソフトウェア

動的壁紙ソフトと言えば、多くの人が `Wallpaper Engine` を聞いたことがあるか、使ったことがあるでしょう。これは Steam Store で高評価の壁紙ソフトで、価格は `18` 元です。私も以前から使っていましたが、今日紹介するのは別の壁紙ソフト `Lively Wallpaper` です。

続きを読む