56
Silverlight 5で ぶり返すWPF不要論 グレープシティ株式会社 八巻 雄哉 VSUG DAY 2011 Summer

Silverlight 5でぶり返すWPF不要論

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Silverlight 5でぶり返すWPF不要論

Silverlight 5で ぶり返すWPF不要論

グレープシティ株式会社

八巻 雄哉

VSUG DAY 2011 Summer

Page 2: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

Silverlight 5 Betaの新機能 What's New in Silverlight 5 Beta

2

Page 4: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

ItemsControlの検索機能

4

ListBoxやComboBoxといったItemsControlで、キーボード入力による検索ができる

これに伴い検索対象を指定する TextSearch.TextPathプロパティが追加

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 5: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

3D

5

DrawingSurfaceコントロール

XNA Games Studio 4.0グラフィックス ライブラリ(サブセット)

WPF

Viewport3Dコントロール

XAMLによる3D描画

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 6: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

システムウィンドウの表示

6

System.Windows.Windowクラス

クラス自体はSilverlight 4から存在

4ではOOB時のメインウィンドウを操作するためのクラス

5ではTitle、Content、Visibilityなどのプロパティが追加

WPFではこれらに加え

Iconの変更可、直接XAMLでWindowをデザイン可

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 7: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

クリック回数の検出

7

MouseButtonEventArgs.ClickCountプロパティ

SilverlightとWPFの違い

カウントが初期化されるまでの時間

Silverlight:前のクリックから次のクリックまでを計測

WPF:最初のクリックから計測

WPFのみ

Control.MouseDoubleClickイベント

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 8: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

カスタムのマークアップ拡張

8

マークアップ拡張とは

実行時評価と既存オブジェクトの参照

MarkupExtensionクラスが用意され、 オリジナルのマークアップ拡張が作成可能に

WPF

Silverlightにないマークアップ拡張

x:Static、x:Null、x:Type、x:Array、DynamicResource

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 9: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

構造体における属性構文のサポート

9

構造体のプロパティを属性構文で設定 した場合、4まではXamlParseException

<Border> <Border.CornerRadius> <CornerRadius BottomLeft="100" TopRight="300" /> </Border.CornerRadius> </Border>

<Border CornerRadius="0,300,0,100">

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 10: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

データバインディングのデバッグ

10

{Binding}にブレークポイントを設定

プロパティ名のタイプミス

PrivateなSetter

Binding.IsDebuggingEnabledフィールド

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 11: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

StyleのSetter.Valueプロパティに対する データバインディングサポート

11

SetterのValueプロパティに {Binding}が書ける

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

<Style TargetType="TextBlock"> <Setter Property="FontSize" Value="{Binding FontSize}"/> </Style>

Page 12: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

階層構造をたどってバインディング ソースを探すFindAncestor

12

特定の型の上位要素と連結したいとき (例)DataTemplate内でのデータバインディング

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

<DataTemplate> <CheckBox IsChecked="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType=ListBoxItem}}" /> </DataTemplate>

Page 13: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

DataTemplate.DataTypeプロパティ

13

データの型によって DataTemplateを切り替える

WPF

DataTypeのほかに、任意の条件でDataTemplateを切り替えるDataTemplateSelectorもある

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 14: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

動的生成されたプロパティに対するデータバインディング

14

動的なカスタム型情報を提供する インターフェイス

ICustomTypeProvider

WPF

ICustomTypeDescriptor

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 15: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

信頼されたアプリケーションにおける 制限のないローカルファイルシステムへのアクセス

15

Silverlight 4

ユーザープロファイルの特定フォルダーのみ

MyDocuments、MyMusic、MyPictures、MyVideos

Silverlight 5 Beta

制限なし

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 16: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

信頼されたアプリケーションのブラウザー内実行

16

条件

HKEY_LOCAL_MACHINE¥Software¥Microsoft¥Silverlight¥

AllowElevatedTrustAppsInBrowser

デジタル署名の追加

利用可能となる機能の例

WebBrowserコントロール

NotificationWindow

WPF 完全信頼XBAP(イントラネットのみ)

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 17: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

効果音のための軽量なクラス

17

Microsoft.Xna.Framework.Audio.SoundEffect

ピッチやパンの変更が可能

ループが簡単

MediaElementはメディアの再生が目的

再生までのレイテンシーが大きいため効果音などには向かない

WPF

SoundPlayerAction

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 18: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

MediaElement再生速度の変更

18

MediaElement

PlaybackRateプロパティ

マイナス値の設定が可能と書かれているが逆再生されない

WPF

SpeedRatioプロパティ

マイナス値は設定できない(逆再生はサポートされていない)

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 19: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

テキスト系コントロールの文字間と行間の調整

19

CharacterSpacingプロパティ

LineHeightプロパティ

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 20: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

RichTextBoxOverflowコントロール

20

WPFに同等のコントロールはない

入力を必要としなければFlowDocumentを使ったより高度なレイアウトが可能

2 3 4 5 Silverlight 3.0 3.5 3.5SP1 4 WPF

Page 21: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

Silverlight 5 Betaの新機能まとめ

21

すでにWPFで実装されていた機能

① ItemsControlの検索機能

② システムウィンドウの表示

③ クリック回数の検出

④ カスタムのマークアップ拡張

⑤ 構造体における属性構文のサポート

⑥ StyleのSetter.Valueプロパティに対するデータバインディングサポート

⑦ 階層構造をたどってバインディングソースを探すFindAncestor

⑧ DataTemplate.DataTypeプロパティ

⑨ LineHeightプロパティ

Page 22: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

Silverlight 5 Betaの新機能まとめ

22

機能としてはWPFにあるが、 WPFとは異なるかたちで追加された機能

① 3D

② 動的生成されたプロパティに対する データバインディング

③ 効果音のための軽量なクラス

④ MediaElement再生速度の変更

Page 23: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

Silverlight 5 Betaの新機能まとめ

23

Webブラウザのプラグインであることで 必要となる機能

① 信頼されたアプリケーションにおける 制限のないローカルファイルシステムへのアクセス

② 信頼されたアプリケーションの ブラウザー内実行

Page 24: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

Silverlight 5 Betaの新機能まとめ

24

WPFに対してアドバンテージとなる機能

① データバインディングのデバッグ

② CharacterSpacingプロパティ

③ RichTextBoxOverflowコントロール

Page 25: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

Silverlight 5 Betaの新機能まとめ

25

機能の種類 機能数

すでにWPFで実装されていた機能 9

機能としてはWPFにあるが、WPFとは異なるかたちで追加された機能 4

Webブラウザのプラグインであることで必要となる機能 2

WPFに対してアドバンテージとなる機能 3

Page 26: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

なぜWPF不要論がでてくるのか 扶養することはあっても不要になることはない

26

Page 27: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

なぜWPF不要論がでてくるのか

27

同じような技術が2つある

どちらか1つでよいのでは?

選ぶならSilverlightでしょ

WPF不要論

Page 28: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

手塩にかけて育てられているSilverlight

28

毎年のようにメジャーバージョンアップ

頭文字をとった略称ではない名前と専用のロゴ

0

5

10

2006 2007 2008 2009 2010 2011

Googleトレンド

WPF

Silverlight

Page 29: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

図で比較

29

WPF Windowsフォーム

ベースクラスライブラリ(BCL)

UIフレームワーク

ADO.NET

WF WCF

(クライアント)

.NET Frameworkクラスライブラリ Extended

ベースクラスライブラリ(BCL)

共通言語ランタイム (CLR) 共通言語ランタイム (CLR)

ASP.NET WCF

(サーバー)

WCF (クライアント)

.NET Framework Silverlight

.NET Frameworkクラスライブラリ Client Profile

Silverlightの .NET Frameworkクラスライブラリ

Page 30: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

同じようなもの?

30

WPFとは何か?

.NET Frameworkクラスライブラリの一部

Windows OSのグラフィックサブシステム

Silverlightとは何か?

Webブラウザーのプラグイン

Page 31: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

できることが同じ?

31

Silverlight 3

ブラウザー外実行(OOB)

Silverlight 4

信頼されたアプリケーション

セキュリティ制限の緩和

利用できるローカルリソースの拡大

Silverlight 5

信頼されたアプリケーションのさらなる制限緩和

信頼されたアプリケーションのブラウザ内実行

Page 32: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

WPF 3.0 WPF 3.5 WPF 3.5 SP1 WPF 4

Silverlight 2 Silverlight 3 Silverlight 4 Silverlight 5

WPFとSilverlightの進化(印象)

32

機能

機能

Page 33: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

リファレンスから感じとる

33

クラス数

メンバ数

コンストラクタやメソッドの オーバーロード数

列挙体の値数

Sealed修飾子

Page 34: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

System.Windows.Controls名前空間

34

WPF 4 Silverlight 5 Beta

クラス数 155 115

自分だけが持つクラス数 65 25

両方が持つクラス数 90

65

90

90

25 Silverlight

WPF

WPFのみ 共通 Silverlightのみ

Page 35: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

SilverlightにあってWPFにないクラス(抜粋)

35

AutoCompleteBox ChildWindow DataGridRowGroupHeader

DataPager DescriptionViewer DrawingSurface

HyperlinkButton MultiScaleImage RichTextBoxOverflow

ValidationSummary WebBrowserBrush

Page 36: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

WPFにあってSilverlightにないクラス(抜粋)

36

AccessText *****Converter ContextMenu

DataGridComboBoxColumn DataGridHyperlinkColumn DataTemplateSelector

DockPanel DocumentViewer Expander

FlowDocument***** GroupBox InkCanvas

ListView Menu PrintDialog

Separator SoundPlayerAction SpellCheck

StickyNoteControl StyleSelector ToolBar

Viewport3D

Page 37: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

System.Windows.Input名前空間

37

WPF 4 Silverlight 5 Beta

クラス数 109 27

自分だけが持つクラス数 82 0

両方が持つクラス数 27

82

27

27

Silverlight

WPF

WPFのみ 共通 Silverlightのみ

Page 38: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

System.Windows.Controls.Buttonクラス

38

WPF 4 Silverlight 5 Beta

プロパティ数 136 63

自分だけが持つプロパティ数 76 3

両方が持つプロパティ数 60

76

60

60

3 Silverlight

WPF

WPFのみ 共通 Silverlightのみ

Page 39: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

SilverlightにあってWPFにないプロパティ

39

CharacterSpacing Projection TabNavigation

Page 40: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

WPFにあってSilverlightにないクラス(抜粋)

40

AreAnyTouches***** BindingGroup CommandBindings

CommandTarget ContentStringFormat ContentTemplateSelector

ContextMenu Focusable ForceCursor

HandlesScrolling InputBindings Is*****

LayoutTransform LogicalChildren OverridesDefaultStyle

SnapsToDevicePixels ToolTip Touches*****

Visual*****

Page 41: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

System.Markup.XamlReaderクラス

オーバーロードの数

41

WPF 4 Silverlight 5 Beta

Load(Stream) -

Load(XamlReader) -

Load(XmlReader) -

Load(Stream, ParserContext) -

- Load(string)

LoadAsync(Stream) -

LoadAsync(XmlReader) -

LoadAsync(Stream, ParserContext) -

Page 42: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

列挙体の値

42

System.Windows.Data.UpdateSourceTrigger列挙体

WPF 4 Silverlight 5 Beta

Default Default

PropertyChanged -

LostFocus -

Explicit Explicit

Page 43: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

sealed修飾子

43

WPF 4

Silverlight 5 Beta

public sealed class RepeatButton : ButtonBase

public class RepeatButton : ButtonBase

Page 44: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

Silverlight 2

Silverlight 3

Silverlight 4

Silverlight 5

WPF 3.0 WPF 3.5 WPF 3.5 SP1 WPF 4

WPFとSilverlightの進化(実際)

44

懐の深さ

表に見えやすい機能

懐の深さ 表に見えやすい機能

Page 45: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

懐の深さ

45

開発生産性

頑張れば実現可能な機能

プラットフォーム固有機能、 ハードウェアリソース活用など

頑張っても実現不可能な機能

Page 46: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

リーチの広さ

46

幅広い実行環境

クロスプラットフォーム(PCのみ)

クロスブラウザー

軽量なランタイム

インストールエクスペリエンス

Page 47: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

選択のポイント

47

懐の深さ リーチの広さ

軽量なランタイム

幅広い実行環境

プラットフォーム固有機能

ハードウェアリソース活用

開発生産性

WPF

Silv

erlig

ht

Page 48: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

GrapeCity × WPF GrapeCity × Silverlight

このセッションはグレープシティの提供でお送りしています

48

Page 49: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

GrapeCity × WPF GrapeCity × Silverlight

49

WPF

Silv

erlig

ht

グリッド

入力支援

FlexGrid for Silverlight

InputMan for Silverlight InputMan for WPF

FlexGrid for WPF

Page 50: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

WPF/Silverlightにおける サードパーティコンポーネントの必要どころ

50

①標準DataGridの スクロールパフォーマンス

②標準入力系コントロールの不足

Page 51: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

高度なレイアウトシステムが スクロールパフォーマンスに影響

強力かつ柔軟なレイアウトシステムの代償

パネルに子要素が追加されるたびに、 再帰的に子要素の大きさと位置の測定が行われる

リスト項目を大量に表示するコントロールでは、 パフォーマンス負荷となる

「UIの仮想化」を行い、画面に表示されている部分の オブジェクトのみを生成することで解決

レイアウトプロセスの負荷低減

メモリ使用量の削減

Page 52: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

標準DataGrid vs FlexGrid

標準DataGrid

列方向にはUIの仮想化が行われない

FlexGrid

行と列の双方向にUIの仮想化が行われる

Page 53: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

カスタマイズ性 vs コントロール数

Windowsフォーム

外観のカスタマイズ性が低い

細分化されたコントロールによる高い生産性

WPF/Silverlight

外観のカスタマイズ性が高い

標準で用意されているコントロールが少ない (特に入力系コントロール)

業務アプリでは機能のカスタマイズが重要

Page 54: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

業務アプリで使われる入力系コントロール

Windowsフォーム WPF/Silverlight InputMan for WPF

テキスト TextBox TextBox GcTextBox

日付 DateTimePicker DatePicker GcDateTime

数値 NumericUpDown - GcNumber

マスク MaskedTextBox - GcMask

Page 55: Silverlight 5でぶり返すWPF不要論

VSUG DAY 2011.06.19

比較:日付入力コントロール

DateTimePicker (Windowsフォーム)

DatePicker (WPF/Silverlight)

GcDateTime (InputMan for WPF) (InputMan for Silverlight)

数字のみの入力 ✔ - ✔

ドロップダウンカレンダー ✔ ✔ ✔

スピンボタンによる日付入力 ✔ - ✔

時刻入力 ✔ - ✔

Null値サポート - ✔ ✔

ドロップダウンボタンの外観

和暦、入力時/表示時の書式設定、入力候補、フィールド単位のフォーカス制御、…

- - ✔

Page 56: Silverlight 5でぶり返すWPF不要論

56