連載:XAMLの基礎知識

第2回 XAMLとWPFの関係

デジタルアドバンテージ 遠藤 孝信
2008/02/15
Page1 Page2 Page3

アプリケーション定義をC#/VBで記述

 ここまできたら、最後はapp.xamlもC#/VBで書き直して、すべてをC#/VBにしてみましょう。

 WPFであってもアプリケーションのスタート・ポイントは静的メソッドであるMainメソッドです。Mainメソッドでは、Applicationクラス(実際には、その子クラス)のインスタンス化を行い、Runメソッドを呼び出してアプリケーションを開始します。先ほどのStartupイベント・ハンドラを記述したファイルに、このようなMainメソッドを追加します。これは次のようになります。

using System;
using System.Windows;

public class HelloWorldApp : Application {


  [STAThread]
  static void Main() {
    HelloWorldApp app = new HelloWorldApp();
    app.Startup += app.HelloWorldApp_Startup;
    app.Run();
  }

  void HelloWorldApp_Startup(object sender, StartupEventArgs e)
  {
    HelloWorldWindow win = new HelloWorldWindow();
    win.Show();
  }
}

Imports System
Imports System.Windows

Partial Public Class HelloWorldApp
    Inherits Application


  <STAThread> _
  Shared Sub Main()
    Dim app As New HelloWorldApp()
    AddHandler app.Startup, AddressOf app.HelloWorldApp_Startup
    app.Run()
  End Sub

  Sub HelloWorldApp_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
    Dim win As New HelloWorldWindow()
    win.Show()
  End Sub
End Class

リスト11 app.xamlの内容をC#/VBで記述したコード(上:app.cs、下:app.vb)

 ここでも従来のWindowsフォームのMainメソッドと似た構造になっているのが分かります。WPFはまったく新しく設計されたWindowsアプリケーション用のフレームワークですが、従来のWindowsフォームからのスムーズな移行が行えるように、従来と似た構造が採用されているようです。

 この時点でHelloWorld.exeを作成するのに必要なソース・ファイルは、リスト7(win.cs/win.vb)とリスト11(app.cs/app.vb)だけになりました。これだけであればもはやプロジェクト・ファイルを使わずとも、次のようなコマンドによりコマンドラインからのコンパイルも可能です。

csc.exe /out:HelloWorld.exe /target:winexe /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationframework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\windowsbase.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationcore.dll" app.cs win.cs
vbc.exe /out:HelloWorld.exe /target:winexe /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationframework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\windowsbase.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationcore.dll" app.vb win.vb
リスト7とリスト11からHelloWorld.exeを作成するコマンド(上:C#の場合、下:VBの場合)

 コンパイラであるcsc.exeやvbc.exeはMSBuild.exeと同じディレクトリに格納されています。ここでは/referenceオプションにより、WPFアプリケーションに必要な3つのアセンブリを参照しています。

 ちなみに上記のリスト11は若干冗長になっています。これは次のリスト12のように書き換えても同じです。

using System;
using System.Windows;

public class HelloWorldApp : Application {

  [STAThread]
  static void Main() {
    HelloWorldApp app = new HelloWorldApp();
    app.Run(new HelloWorldWindow());
  }
}
Imports System
Imports System.Windows

Partial Public Class HelloWorldApp
    Inherits Application

  <STAThread> _
  Shared Sub Main()
    Dim app As New HelloWorldApp()
    app.Run(New HelloWorldWindow())
  End Sub
End Class
リスト12 app.xamlの内容をC#/VBで記述したコード(上:app.cs、下:app.vb)

 今回はXAMLで記述されていたHelloWorldプログラムを、徐々にC#/VBで書き換えていきました。これによりXAMLとWPFの関係が少しは見えたでしょうか。XAMLはこれまでなかったスタイルでアプリケーションを記述するため、なかなか取っつきにくいところもありますが、対応するWPFのクラスを確認しながら学習を進めれば理解も深まると思います。

 さて若干遠回りした感もありますが、次回からはXAMLの記述方法を解説していく予定です。End of Article

 

 INDEX
  XAMLの基礎知識
  第2回 XAMLとWPFの関係
    1.コードビハインドによるイベント・ハンドラの記述
    2.ウィンドウをXMALではなくC#/VBで記述
  3.アプリケーション定義をC#/VBで記述
 
インデックス・ページヘ  「XAMLの基礎知識」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間