SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Vista時代のプログラミングモデル .NET Framework 3.0入門

WPF(Windows Presentation Foundation)+XAML入門 前編

Vista時代のプログラミングモデル .NET Framework 3.0入門(1)


  • X ポスト
  • このエントリーをはてなブックマークに追加

XAMLについて

 WPFの特徴の1つは、XAML(Extensible Application Markup Language:ザメル/ザムル)と呼ばれる言語を用いてアプリケーションのUIを記述できる点にあります。XAMLはXMLベースの言語で、ボタンや2D/3D描画のためのコンポーネントを、XMLのタグを用いて表現します。

 例えば、ウィンドウ内にチェックボックス・テキストボックス・ボタンを配置した状態のXAMLは次のようになります。

XAMLサンプル
<Window x:Class="WindowsApplication1.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WindowsApplication1" Height="300" Width="300">
  <Grid>
    <CheckBox Height="13" Margin="50.2366666666667,21,0,0" 
        Name="checkBox1" Width="65.7633333333333">
      CheckBox
    </CheckBox>
    <TextBox Height="26" Margin="50,46,142,0" Name="textBox1">
    </TextBox>
    <Button Height="27" Margin="53,96,0,0" Name="button1" Width="75">
      Button
    </Button>
  </Grid>
</Window>
上記のXAMLに対応するGUI
上記のXAMLに対応するGUI

 ここで使用しているCheckBoxTextBoxButtonといったXMLの要素はそれぞれ.NET Framework 3.0のクラスに対応します。HeightNameといったXMLの属性はそれぞれのクラスのプロパティに対応します。

 WPFでは、このようにXAMLファイルでUIを定義し、実際のイベント処理などはXAMLと連携して動作するコードビハインドのプログラムファイルに記述します。これはちょうどASP.NETのモデル(.aspxファイル内にASP.NETのタグを用いてさまざまなコンポーネントを配置し、イベント処理はコードビハインドの.aspx.cs/.aspx.vbファイルに記述する)に似ていると言えるかもしれません。

 ASP.NETでは、コードビハインドモデル以外に、.aspxファイル内に直接プログラムを記述するページインラインモデルを用いることができますが、XAMLでも同様に、XAMLファイル内に直接プログラムを記述することができます。

XAML内のインラインコード
<x:Code>
  <![CDATA[
  private void button1_Clicked(object sender, RoutedEventArgs e)
  {
    //イベント処理
  }
  ]]>
</x:Code>

 また、XAMLを単純にコンテンツ記述言語として考え、コードビハインドのプログラムを実装しないことも可能です。その場合は「Loose XAML」と呼びます。

Windows FormsでのUI記述
 これまでのWindows Formsでは、Visual Studioの画面上で配置したコントロールの情報はUI記述言語として記録されているわけではなく、すべて「○○コントロールを座標△△に配置し、プロパティは××とする」といったソースコードに置き換えられていました。個人的には「Windows FormsでもASP.NETのようなUI記述専用の言語があれば分かりやすくて良いのに」と常々思っていましたが、そうした願いがXAMLの登場でかなえられた形となりました。

WPFを採用する理由

 「WPFを使えば3Dなどの新しい機能を使えることは分かった。でも当分3Dを使った開発の予定はないし、無理してWPFに移行する意味はあまりないのでは……」

 もっともな意見ですが、開発者にとってのWPFのメリットは3Dなどの新機能を利用できること以外にも多くあります。とりわけ、Win16時代から設計がずっと変わっていないGDI(Windows XPでC++言語ベースのGDI+が採用されたものの、WPFほど抜本的な変更ではなかった)の枠組みを捨て、完全に新たな標準となったことで、開発者がWPF開発を覚える意義は大きいと言えます。

 GDIを直接使うには大量のコードが必要だったため、GUIアプリケーションを作成するためにこれまでに多くのフレームワークが出てきました。言語は限定されますがVisual BasicやDelphiはGUIアプリケーション開発への1つの解でしたし、C++言語ではMFC・ATL/WTLなどのライブラリを使うのが一般的でした。こうしたフレームワークごとにUI部品の使い方は異なり、そのたびに学習し直す必要がありました。もちろんWPFでも新たな技術を覚える必要がありますが、基本的にはWindows Formsの延長上にある技術であり、.NET開発になじみがある開発者であれば、比較的短期間で習得することができるでしょう(ただしXAML自体の仕様はなかなか大きいので、すべてを把握するのはやや大変かもしれません……)。Windows Vistaの基盤として採用されたWPFは、Windows上の標準UIコンポーネントとして、今後もずっとサポートされることは間違いありません。当面廃れる心配がない技術ですので、安心して学習することができます。

 また、XAMLというUI記述言語を採用することで、Webアプリケーション開発では一般的ながら、スタンドアロンアプリケーションではあまり重視されてこなかった、デザイナと開発者の連携が容易となります。例えば現状ではExpression Blendなどを利用することで共同作業できます。これまでのアプリケーション開発では、Windowsアプリケーションの標準的なUI作法にただ従っていればよかったかもしれませんが、きちんとデザインされたWebが浸透した現在では、いかに使いやすく魅力的なUIを提供するかという部分がアプリケーション開発の重要な側面となっています。これまでの、デザイナから上がってきたラフスケッチを見ながら開発者が(デザインに向いているツールとは言い難い)Visual Studioを用いて画面を作成し、またデザイナからのレビューを受けて開発者が修正、といった面倒な作業が不要となって、それぞれが自分の本業に集中できる環境となれば、作業効率・品質共に向上することでしょう。

 手放しで褒めすぎた感もありますが、WPFが魅力的な技術であることは確かです。ぜひトライしてみてください。

次のページ
WPFのアプリケーション形態

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Vista時代のプログラミングモデル .NET Framework 3.0入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/910 2007/02/05 10:10

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング