次の方法で共有


チュートリアル: WPF アプリを最新化する

アプリをゼロから書き直す代わりに、最新のWindows機能を既存のソース コードに統合することで、既存のデスクトップ アプリをmodernizeする方法は多数あります。 このチュートリアルでは、次の機能を使用して、既存のWPF基幹業務アプリを最新化するいくつかの方法について説明します。

  • .NET Core 3
  • XAML Islands を使用する UWP XAML コントロール
  • Adaptive CardsとWindows通知
  • MSIX の展開

このチュートリアルでは、以下の開発スキルが必要です。

  • WPFを使用してWindowsデスクトップ アプリを開発した経験。
  • C# と XAML の基本的な知識。
  • UWP の基本的な知識。

概要

このチュートリアルでは、Contoso Expenses という名前の単純なWPF基幹業務アプリのコードを提供します。 このチュートリアルの架空のシナリオでは、Contoso Expenses は、レポートで送信される経費を追跡するために Contoso Corporation のマネージャーによって使用される内部アプリです。 現在、マネージャーはタッチ対応デバイスを備えており、マウスやキーボードを使用せずに Contoso Expenses アプリを使用したいと考えています。 残念ながら、現在のバージョンのアプリはタッチ対応ではありません。

Contoso は、従業員がより効率的に経費報告書を作成できるように、新しいWindows機能でこのアプリを最新化したいと考えています。 機能の多くは、新しい UWP アプリをビルドすることで簡単に実装できます。 しかし、既存のアプリは複雑であり、これは長期にわたるさまざまなチームによる開発の結果です。 そのため、新しいテクノロジを使用して最初から書き換えることはできません。 チームは、既存のコードベースに新機能を追加するための最適な方法を探しています。

チュートリアルの冒頭で、Contoso Expenses は .NET Framework 4.7.2 を対象とし、次のサード パーティ製ライブラリを使用します。

  • MVVM Light。MVVM パターンの基本実装。
  • Unityは、依存関係の注入コンテナーです。
  • LiteDb は、データを格納するための埋め込みNoSQL ソリューションです。
  • Bogus。仮のデータを生成するためのツール。

このチュートリアルでは、新しいWindows機能を使用して Contoso Expenses を強化します。

  • 既存のWPF アプリを .NET Core 3.0 に移行します。 これにより、今後、新しい重要なシナリオが開かれます。
  • XAML Islands を使用して、InkCanvas および MapControl Windows Community Toolkit によって提供されるラップされたコントロールをホストします。
  • XAML Islands を使用して、標準の UWP XAML コントロール (この場合は CalendarView) をホストします。
  • Adaptive Cards通知とWindows通知をアプリに統合します。
  • MSIX を使用してアプリをパッケージ化し、Azure DevOpsに CI/CD パイプラインを設定して、使用可能になるとすぐにテスト担当者とユーザーにアプリの新しいバージョンを自動的に配信できるようにします。

前提条件

このチュートリアルを実行するには、開発用コンピューターにこれらの前提条件がインストールされている必要があります。

  • Windows 10バージョン 1903 (ビルド 18362) 以降のバージョン。
  • Visual Studio 2019
  • .NET Core 3 SDK (最新バージョンをインストールします)。

Visual Studio 2019 では、次のワークロードとオプション機能をインストールしてください。

  • .NET デスクトップ開発
  • Universal Windows Platform開発
  • Windows SDK (10.0.18362.0 以降)

Contoso Expenses のサンプル アプリを取得する

チュートリアルを開始する前に、Contoso Expenses アプリのソース コードをダウンロードし、Visual Studioでコードをビルドできることを確認します。

  1. AppConsult WinAppsModernization ワークショップ リポジトリの [リリース] タブからアプリのソース コードをダウンロードします。 直接リンクは https://github.com/microsoft/AppConsult-WinAppsModernizationWorkshop/releases です。
  2. zip ファイルを開き、すべてのコンテンツを C:\ ドライブのルートに展開します。 C:\WinAppsModernizationWorkshopという名前のフォルダーが作成されます。
  3. Visual Studio 2019 を開き、C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses\ContosoExpenses.sln ファイルをダブルクリックしてソリューションを開きます。
  4. Start ボタンまたは Ctrl + F5 キーを押して、Contoso Expenses WPF プロジェクトをビルド、実行、デバッグできることを確認します。

概要

Contoso Expenses サンプル アプリのソース コードを入手し、Visual Studioでビルドできることを確認したら、チュートリアルを開始する準備ができました。

重要な概念

以下のセクションでは、このチュートリアルで説明するいくつかの主な概念の背景を示します。 これらの概念について既によく理解している場合は、このセクションを省略してかまいません。

Universal Windows Platform (UWP)

Windows 8では、Microsoft は Windows Runtime (WinRT) の一部として新しい API セットを導入しました。 .NET Framework とは異なり、WinRT はアプリに直接公開される API のネイティブ レイヤーです。 また、WinRT では、ランタイムの上に追加されたレイヤーである言語プロジェクションが導入されており、開発者は C# に加え、C# や JavaScript などの言語を使ってやり取りすることができます。 プロジェクションを使用すると、開発者は、.NET Framework を使用してアプリを構築する場合と同じ C# と XAML の知識を活用するアプリを WinRT 上に構築できます。

Windows 10では、Microsoft は WinRT 上に構築された Universal Windows Platform (UWP) を導入しました。 UWP の最も重要な機能は、すべてのデバイス プラットフォームで共通の API セットを提供することです。アプリがデスクトップ、Xbox One、またはHoloLensで実行されているかどうかにかかわらず、同じ API を使用できます。

今後、ほとんどの新しいWindows機能は、タイムライン、Project Rome、Windows Helloなどの機能を含む WinRT API を介して公開されます。

MSIX パッケージング

MSIX は、Windows アプリの最新のパッケージ モデルです。 MSIX では、Win32、WPF、Windows Forms、Java、Electron などのテクノロジを使用して構築される UWP アプリとデスクトップ アプリがサポートされています。 MSIX パッケージでデスクトップ アプリをパッケージ化する場合、アプリを Microsoft Store に公開できます。 デスクトップ アプリでは、インストール時にパッケージ ID が取得されます。これにより、デスクトップ アプリでより広範な WinRT API を使用できるようになります。

詳細については、これらの記事を参照してください。

XAML Islands(XAMLアイランズ)

Windows 10 バージョン 1903 以降では、XAML Islands という機能を使用して、UWP 以外のデスクトップ アプリで UWP コントロールをホストできます。 この機能を使用すると、UWP コントロールでのみ使用できる最新のWindows UI 機能を使用して、既存のデスクトップ アプリの外観、操作性、機能を強化できます。 つまり、既存のWPF、Windows Forms、C++ Win32 アプリで、Windows Ink や Fluent Design System をサポートするコントロールなどの UWP 機能を使用できます。

詳細については、デスクトップ アプリケーション (XAML Islands)での UWP コントロールの に関するページを参照してください。 このチュートリアルでは、異なる 2 種類の XAML Island コントロールを使用するプロセスについて説明します。

  • Windows Community Toolkit の InkCanvas および MapControl。 これらのWPF コントロールは、対応する UWP コントロールのインターフェイスと機能をラップし、Visual Studio デザイナーの他のWPF コントロールと同様に使用できます。

  • UWP カレンダー ビュー コントロール。 これは、Windows Community Toolkit の WindowsXamlHost コントロールを使用してホストする標準的な UWP コントロールです。

.NET Core 3

.NET Core は、クロスプラットフォームで軽量で拡張可能なバージョンの完全な.NET Framework を実装するオープンソース フレームワークです。 完全な .NET Framework と比較して、.NET Core の起動時間は大幅に短縮され、多くの API が最適化されています。

最初のいくつかのリリースを通じて、.NET Core は Web アプリまたはバックエンド アプリをサポートすることに重点を置いていました。 .NET Core を使用すると、Windows、Linux、または Docker コンテナーなどのマイクロサービス アーキテクチャでホストできるスケーラブルな Web アプリまたは API を簡単に構築できます。

.NET Core 3 は、.NET Core の最新リリースです。 このリリースのハイライトは、Windows FormsアプリやWPF アプリなど、Windowsデスクトップ アプリのサポートです。 .NET Core 3 で新規および既存のWindows デスクトップ アプリを実行し、.NET Core が提供するすべての利点を享受できます。 XAML Islands でホストされている UWP コントロールは、コア 3 をターゲットとするWindows FormsおよびWPF アプリ .NETでも使用できます。

注意

WPFとWindows Formsはクロスプラットフォームにならず、Linux および MacOS でWPFまたはWindows Formsを実行することはできません。 WPFとWindows Formsの UI コンポーネントは、引き続きWindowsレンダリング システムに依存しています。

詳細については、「.NET Core 3.0 の新機能を参照してください。