XAML2009 : .NETにおける宣言型プログラミングの進化

T3-402
鈴木章太郎
アーキテクトエバンジェリスト
マイクロソフト株式会社
本セッションでは、
現在開発中の製品を取り扱っています。
このセッションは、現時点での情報を元にしています。
仕様および機能は変更される可能性があります。
XAML 2006の現状と課題
WPF / Silverlightにおける XAML
XAML 2009による強化ポイント
XAML データモデル
System.Xaml.dll in .NET 4.0
.NET における XAML Ready Framework
リソース・関連セッション他
.NET 3.0 においては成功を収める
XAML ボキャブラリ :
UI : Silverlight / WPF におけるデザイナー&デベロッパー協業
ワークフロー : 宣言的なワークフローのコーディネーション
電子書類 : XML Paper Specification (XPS)
ランタイム :
.NET 3.0 & 3.5; Silverlight 1.0 & 2
ツール :
Visual Studio 2008 ( WPF, WF デザイナー, XAML エディタ ),
Expression Blend 2 SP1
XAML 仕様 が公開
[MS-XAML], [MS-WPFXV], [MS-SLXV], and XPS ( → ECMAで標準
化へ)
ファイルコンバーター :
Blender, Fireworks, LightWave, Flash, SVG, Visio, Maya, 3ds,
Illustrator, WMF, EMF, PSD, DWG, DXF, OBJ, 等々
まだまだやるべきことはある!
言語の進化が必要
もっと高速に!
XAML/BAMLの基本的な部分に関しては、
さらなる継続的投資が必要
コンパイル, デバッグ,データの難読化,
ローカライゼーション, FxCop, Visual
Studioとの統合, その他
誰もが独自のパーサーを書く必要があるの
か?
XAMLを使い、もっと多くの領域をモデ
リングしたい
言語の拡張
より高速なパーシング !
XAML ドキュメントは、より簡単に
パースでき、実行でき、そして変換で
きる
XAML Ready Framework
マークアップ言語
シンプルな宣言的ステートメントによるアプリケーション構築
WPF / Silverlight に限らず CLR objectに対して階層的に利用可能
コードとコンテンツの分離
デザイナーとデベロッパーとの共同作業を効率化する
ツール (Visual Studio 2008, Expression Blend 2, (XAML Pad)
等)を使って簡単に作成・利用ができる
<Button Width="100">OK
<Button.Background>
LightBlue
</Button.Background>
</Button>
Button b1 = new Button();
b1.Content = "OK";
b1.Background = new
SolidColorBrush
(Colors.LightBlue);
b1.Width = 100;
Dim b1 As New Button
b1.Content = "OK"
b1.Background = New _
SolidColorBrush _
(Colors.LightBlue)
b1.Width = 100
Animation, Triggers, Timelines
Templated
Button
XAMLで生成
<StackPanel>
<StackPanel.Triggers>
<EventTrigger RoutedEvent=“Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<BeginStoryboard.Storyboard>
<Storyboard>
<ColorAnimation To="Yellow" Duration="0:0:0.5“
Storyboard.TargetName="TheBrush"
Storyboard.TargetProperty="Color" />
UI サービスとして下記の機能
を持つ
<DoubleAnimation To="45" Duration="0:0:2"
Storyboard.TargetName="LowerEllipseTransform"
Storyboard.TargetProperty="Angle" />
• Templates
• Layout
• Controls Library
• Styles and Resources
• Animation
...
</StackPanel.Triggers>
… remainder of contents of StackPanel, including x:Name'd
TheBrush and LowerEllipseTransform …
</StackPanel>
Binding Target
Binding Source
Dependency Object
Object
Dependency
Property
OneWay
TwoWay
OneWayToSource
Property
<StackPanel>
<Label>Select A Customer</Label>
<ListBox
Name="myListBox"
Background="HoneyDew"
ItemsSource=
"{Binding {StaticResource mySource}}"
</ListBox>
</StackPanel>
XAMLの機能としてUI を CLR オブジェクト or XMLにバインドできる
WPFの依存関係プロパティは、ADO.NET や、 例えばWeb サービス
に関連したオブジェクトにバインド可能
値式、プロパティの無効化と依存値の強制、既定値、継承、データ バ
インディング、アニメーション、プロパティの変更通知、およびスタイ
ル設定をサポート
ソート、フィルタ、グループビュー等が適用できる
バインドされたデータに対してデータテンプレートの適用が可能
(ex, Silverlight のDataGridの表示列を選択する、列名を変更して表
示)
鈴木 章太郎
アーキテクトエバンジェリスト
マイクロソフト株式会社
Silverlight と WPF ( .NET Framework )は、
ともに、RIAのあるいはデスクトップの
アプリケーションのプラットフォーム
として優れている
Silverlight は、.NET Framework のサブ
セットではあるが、約“95%” は同様
両者の間におけるスキルと作成済みの
ソーコードは再利用できる
一度覚えれば、いずれにも応用が可能
同じ部分:
UserControl, CustomControl
<Style>, <ControlTemplate>
Silverlight 2 だけの部分 - <Style>
Write-Once Style Property
Styles Support に依拠していない
アプリケーションレベルでのテーマのサポートは
していない
XAMLのルート
WPF - <Window>/</Window> or <Page>/</Page>
Silverlight - <UserControl></UserControl>
WPFにおけるVisualStateManager?
SilverlightにおけるTrigger?
鈴木 章太郎
アーキテクトエバンジェリスト
マイクロソフト株式会社
コントロール & スキンの
簡単なポーティングを実現する
現在:
http://www.codeplex.com/wpf/Release
将来:
WPFの次期バージョンで更なる進化
VSM スキンを、既存の WPF コント
ロールに追加
WPFToolkit に含まれるもの:
ButtonBaseBehavior { Button, ToggleButton}
ListBoxItemBehavior
ProgressBarBehavior
TextBoxBehavior
ToggleButtonBehavior {CheckBox, RadioButton}
鈴木 章太郎
アーキテクトエバンジェリスト
マイクロソフト株式会社
XAML を利用して、プロパティの変化
やイベントに反応できる
Silverlight の将来のリリースにおいて、
登場予定
Trigger と連携する VisualStateManager
<Trigger …>
<GoToState “MouseOver”/>
</Trigger>
Silverlight 2
Xmlns 現在は完全に同一
DependencyProperty.Register(…, …, …, callback);
コントロールテンプレートの改善
Databinding のバリデーション
RoutedEventArgs.Handled
その他多くの API シグネーチャの決定と将来の対応
予定機能
WPF 3.5sp1
Storyboard.Begin() の追加
Storyboard.SetTarget(storyboard, element)
Shared clocks, animation hold
より良い名前参照
XAML 2006
<Label Target="{Binding ElementName=firstName}">
First Name</Label>
<TextBox Name="firstNameBox" />
XAML 2009
<Label Target="{x:Reference firstNameBox}">…</>
<TextBox Name="firstNameBox" />
またはもっと良い方法としては:
<Label Target="firstNameBox">First Name</Label>
<TextBox Name="firstNameBox" />
<WriteLine Text=‘[“Hello ” + firstName]’ /> →
Windows Workflowで使用
オーサリングをシンプルに
XAML 2006
<s:String xmlns:s="clrnamespace:System;assembly=mscorlib">Foo
</s:String>
XAML 2009
<x:String>
<x:Boolean>
<x:Int64>
<x:TimeSpan>
<x:Char>
<x:Byte>
<x:Decimal>
<x:Array>
<x:Single>
<x:Int16>
<x:Object>
<x:List>
<x:Double>
<x:Int32>
<x:Uri>
<x:Dictionary>
Generics の完全サポート
XAML 2006
class PersonCollection : ObservableCollection<Person> {}
<l:PersonCollection>
<Person Name=“Suzuki" />
</l:PersonCollection>
XAML 2009
<ObservableCollection x:TypeArguments="Person">
<Person Name=“Suzuki" />
<Person Name=“Sato" />
<Person Name=“Takahashi" />
</ObservableCollection>
任意のディクショナリーキータイプ
XAML 2006
String または MarkupExtension key のみ
XAML 2009
<Switch x:TypeArguments="x:Int64" Expression="[rating]">
<Sequence x:Key="10">…</Sequence>
<Sequence>
<x:Key>9</x:Key>
…
</Sequence>
</Switch>
→ Workflowで使用
メソッド名を超えて
XAML 2006
<Button Click="button_Click" /> + markup compilation
XAML 2009
<Button Click="button_Click" /> + markup compilation
または:
<Button Click="{DelegateCreatingME Foo}" />
あるいはさらに:(Worklowでも使える)
<Button>
<Button.Click>
<DelegateCreatingME Name="Foo" />
<Button.Click>
</Button>
より良い宣言的なタイプのオーサリング
XAML 2006
<Window x:Class="WpfApplication1.Window1" … />
XAML 2009
<Activity x:Class="ActivityLibrary1.Prompt" …>
<x:SchemaType.Members>
<x:SchemaProperty Name="Text"
Type="InArgument(x:String)" />
<x:SchemaProperty Name="Result"
Type="OutArgument(x:String)" />
</x:SchemaType.Members>
<Sequence>…</Sequence>
</Activity>
非デフォルトコンストラクタの利用
XAML 2006
<DateTime>00:00:00.0000100</DateTime>
XAML 2009
<DateTime>
<x:Arguments>
<x:Int64>100</x:Int64> <!-- Ticks -->
</x:Arguments>
</DateTime>
静的ファクトリーメソッドの利用
XAML 2006
Guid guid = Guid.NewGuid();
XAML 2009
<Guid x:FactoryMethod="Guid.NewGuid" />
x:Arguments で作成・編集する
まとめ
向上した名前参照 (x:Reference)
フル Generics サポート (x:TypeArguments)
ビルトインタイプ
任意のディクショナリーキータイプのサポート
(x:Key)
コンパイルせずにイベントをサポート
新しいプロパティの定義
(x:SchemaType.Members, x:SchemaProperty)
非デフォルトコンストラクタの利用
(x:Arguments)
ファクトリーメソッドの利用 (x:FactoryMethod)
<CheckBox>
hello
</CheckBox>
<CheckBox>
<CheckBox.Content>
hello
</CheckBox.Content>
</CheckBox>
<CheckBox Content="hello"/>
O-M-V
Root Object
オブジェクトはメンバーを持つ
メンバーは、オブジェクトかつ / または値を持つ
いくつかのオブジェクトはコレクション
コレクションは、アイテム保持のため、プロパ
ティを持つ
Types
オブジェクトは、XamlTypes のインターフェース
メンバーは、XamlMembers のインスタンス
object XamlReader.Load(XmlReader)
XML
Nodes
XML Nodes to
XAML Nodes
Create Object
Graph
Resolve Type
Information
Object
Graph
object XamlReader.Load(XmlReader)
XML
Nodes
XML Node to
XAML Node
Type Resolution
XAML Node
to Objects
Object
Graph
object XamlReader.Load(XmlReader)
XML
Nodes
XML Nodes to
XAML Nodes
Create Object
Graph
Resolve Type
Information
Object
Graph
object XamlReader.Load(XmlReader)
XML
Nodes
XML Node to
XamlXmlReader
XAML Node
Type Resolution
XAML
Node
Object
toWriter
Objects
Object
Graph
public abstract class XamlReader : IDisposable
{
abstract bool Read();
abstract XamlNodeType NodeType { get; }
abstract
abstract
abstract
abstract
NamespaceDeclaration Namespace { get; }
XamlType Type { get; }
XamlMember Member { get; }
object Value { get; }
virtual void Skip();
virtual XamlReader ReadSubtree();
abstract XamlSchemaContext SchemaContext { get; }
...
}
public abstract class XamlWriter : IDisposable
{
void WriteNode(XamlReader reader);
abstract void WriteNamespace(
NamespaceDeclaration namespaceDeclaration);
abstract void WriteStartObject(XamlType type);
abstract void WriteGetObject();
abstract void WriteEndObject();
abstract void WriteStartMember(XamlMember member);
abstract void WriteEndMember();
abstract void WriteValue(object value);
...
}
Compact Binary
– .baml
StartObject
ST=Ca
nvas
StartMember
SM=Chi
ldren
StartObject
ST=B
utton
StartMember
SM=Backgr
ound
TeST
StartMember
SM=Co
ntent
Textual - .xaml
StartObject
ST=B
utton
<Canvas>
<Button Background="Green">
Ok
</Button>
<Button Content="Cancel">
<Button.Background>
Red
</Button.Background>
</Button>
</Canvas>
“Gr
een
”
TeST
“
O
k
”
“
R
e
d
”
StartMember
SM=Backgr
ound
TeST
StartMember
SM=Co
ntent
TeST
“Can
cel”
Canvas
Button
Object
Graph
ON
ST=Ca
nvas
PN
SM=Chi
ldren
ON
ST=Bu
tton
ON
ST=Bu
tton
PN
SM=Backgr
ound
PN
SM=Co
ntent
TN
“Gre
en”
TN
“
O
k
”
PN
SM=Backgr
ound
TN
“
R
e
d
”
DOM Tree
PN
SM=Co
ntent
TN
“Canc
el”
Button
B
BamlReader
BamlWriter
X
XamlXmlReader
ObjectWriter
XamlXmlWriter
ObjectReader
Xaml Saving (O から Xへ)
Optimizing Xaml to Binary Form
(X からBへ)
Binary Form Loading @ Runtime
(B から0へ)
Designers – loading into a DOM &
Objects(DOM と Object へのロード)
D
DomReader
Xaml Loading @ Runtime (X から Oへ)
DomWriter
Primary Scenarios
O
X
XamlXmlReader
ObjectWriter
XamlXmlWriter
ObjectReader
SVG Conversion を Objects (SVG to O) へ
SVGReader
SVG Conversion を XAML (SVG to X) へ
SVGWriter
File Conversion Scenarios
XAML Conversion を SVG (X to SVG) へ
Object Saving を SVG (O to SVG) へ
SVG
O
まとめ
データモデル : O-M-V + Types
System.Xaml.dll
XAML, BAML, Objects,その他にわたる、
多くのシナリオは、単一のAPIで実現可能
ファイルコンバーターのための基盤
System.Xaml CTP はまもなくリリース
予定 :
http://go.microsoft.com/fwlink/?LinkId=132499
.NET 3.0
.NET 3.5
.NET 4.0
WPF
Rich XAML
Vocabulary
Rich XAML
Vocabulary
Rich XAML
Vocabulary
WF
Some XAML
Vocabulary
Some XAML
Vocabulary
Rich XAML
Vocabulary
WCF
No XAML
Vocabulary
Some XAML
Vocabulary
Rich XAML
Vocabulary
ストックアドバイス デモアプリケーション
特定の株を買うときに、2人のアナリスト
からアドバイスを貰う
WPF アプリ
Button.Click
WCF
アドバイス
サービス1
WF ワークフロー
WCF
クライアント
操作
WCF
クライアント
操作
UI を更新
WCF
アドバイス
サービス2
鈴木 章太郎
アーキテクトエバンジェリスト
マイクロソフト株式会社
Say what you want without saying how to do it
WPF
WCF
WF
XAML で宣言的にモデルを作成できる
XAML Readyフレームワーク!
オブジェクトベースのシステムのためのシン
プルなファイルフォーマット
XAMLのためのデザインのベネフィット:
XML リーディング / ライティング
マークアップ== オブジェクトモデル
.NET との一貫性
人間が可読可能な XML
より簡単にツールで実現できる
イベントベースのプログラミングモデル
Ride the XAML wave!
マイクロソフトはXAMLに多大な投資をしている
Oslo モデリングツール Quadrant (予定)
Visual Studio 2010 IDE(予定)
Silverlight ver. X, WPF ver. 4.0 or more (予定)
YOU!
YOU!
YOU!
YOU!
YOU!
YOU!
WPF
WCF
YOU!
YOU!
YOU!
WF
YOU!
YOU!
YOU!
XAML 2009
言語の拡張
System.Xaml.dll
より速く!
XAML ドキュメントをより簡単に、パース
し、プロセスし、変換する
XAML Ready Framework
より多くの領域をXAMLのボキャブラリで
モデリング可能!
T2-301
T2-302
T2-304
T2-305
T2-401
T2-402
T3-306
T3-302
T3-401
Windows 7:タスクバーを活用したアプリケーションの開発
Windows 7:マルチタッチ アプリケーションの開発
WPF ロードマップ
Sliverlight の未来: コントロールとモバイル対応
Windows 7:リボン UI 対応アプリケーションの開発
Windows 7:グラフィックスAPI詳解
WCF/WF 4.0:ワークフローサービス開発の進化
はじめての “Oslo” - モデリング プラットフォーム
実践”Oslo”-モデリングプラットフォーム
System.Xaml.dll CTP (予定)
http://go.microsoft.com/fwlink/?LinkId=132499
Rob Relyea(XAML Team, Principal Architect )
のBlog : XAMLified
http://blogs.windowsclient.net/rob_relyea/
Silverlight Site
http://silverlight.net
Silverlight Toolkit
http://codeplex.com/Silverlight
WPF Toolkit
http://www.codeplex.com/wpf
講師のBlog : the Architecture of RIA
http://builder.japan.zdnet.com/member/u508527/blog/
© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.