SlideShare a Scribd company logo
1 of 47
Download to read offline
WPF 入門
             (ことはじめ)
               @Posaune




13年3月9日土曜日
じこしょーかい
             まえかわ ひろし
             a.k.a @Posaune
             やってること
               京都アジャイル勉強会 #京アジャ
               TABOK勉強会
             Blogやってるよ! →
               http://posaune.hatenablog.com/




13年3月9日土曜日
すきなもの
             .NET言語
               C#, F#, XAML系テクノロジ
             Emacs歴半年くらい。
             ReSharper無しで生きていけない。
             TDD
             アジャイル開発的なあれこれ
             自動化(Jenkinsさん)
             UX, HCD(UCD)
             Business Model Generation
13年3月9日土曜日
さて、本題いきまーす。
                 3分くらい?




13年3月9日土曜日
WPFとは。




13年3月9日土曜日
Windows Presentation Foundation
             Windows用のプレゼンテーション層向けのフレームワー
             ク。
             Microsoft公式。
             描画エンジンがGDIベースからDirectXベースに置き換わ
             り、いろいろパワーアップ。
             主な採用アプリ:
               Visual StudioなどのMS系ツール
               Github for Windows
               Sharp Develop
             50分でとても伝えきれる量ではないので、今日はまず、
             ほんのさわり。

13年3月9日土曜日
よくいわれる表現
             「WPFはMicrosoftの最新の描画技術で・・・」
             誕生は2006年ですよお客さん。
             3.0 → 3.5 → 4.0 → 4.5(Now!)


             安定どころかそろそろ枯れてきた気配すら。
             同系統の弟妹も沢山(Silverlight, Windows Phone,
             Win8 ...)
              (不憫な子が多いとか言うな)
             VS 2012 SP2ではこれまで5万くらいしてた開発環境
             が同梱される気配・・・

13年3月9日土曜日
いつやるか?




13年3月9日土曜日
いつやるか?




13年3月9日土曜日
まずはVS上でご紹介
               ここまで5分くらい?




13年3月9日土曜日
柔軟なUIレイアウト
             Windows Formでよくあること
              ボタンの中に画像と文字を・・・
              コンボボックス内に画像も・・・
              タブに閉じるボタンを・・・
             こんにちわオーナードロー。


             ではWPFは?




13年3月9日土曜日
デモ① コントロールが
              こんなところに。




13年3月9日土曜日
階層化されたUI構造
             ボタンの中に入るのは文字でなく、別のUIオブジェクト。
             ほとんどのUIオブジェクトは別のUIオブジェクトを格納可
             能。
             必然的に再帰的な階層構造を持つ。

         <Button>
             <Grid>
                  <TextBlock><Run Text="Click Me!"/></TextBlock>
                  <Image Source="testImage.jpeg" Stretch="Fill"/>
             </Grid>
         </Button>

             伊達や酔狂でXMLにUI書いてる訳ではないのです。
              あ、これをXAMLといいます。

13年3月9日土曜日
UI描画はいじり放題
             再びWindow Formでよくあること
              スクロールバーの色変えたい
              Macみたいなスライダーがいいよ―
              ボタンももっとMacっぽく・・・
              むりなのー?じゃあせめてメトロっぽく!
             こんにちわオーナードロー


             ではWPFは?


13年3月9日土曜日
デモ②:
         GDIとは違うのだよ、GDIとは。




13年3月9日土曜日
これがWPFの威力です(ドヤァ
             コントロールの描画はほぼ完全にカスタマイズ可能
              ボタンだろうがコンボボックスだろうかスクロー
              ルバーだろうが。
              WPFは、UIの描画部分をStyleとTemplateという仕
              組みでカスタマイズ!コレ覚えて帰ってね。


             ベクターベースの描画なので、拡大しても
             くずれない!
              拡大・縮小・回転などがプロパティになってる


13年3月9日土曜日
StyleとTemplate
             Style:
               プロパティの変更セットをリソースとして保持す
               る仕組み
             Template:
               コントロールがどう描画されるか、というUI構造
               のテンプレートを保持する。
                 実行時には展開されてる。
               プロパティの一つ。(だからStyleで一緒に管理
               することが多い)



13年3月9日土曜日
デモ:中身を覗き見して
                みましょう




13年3月9日土曜日
ちょっと脇道:SNOOP
             WPF開発での必須ツール。
             WPFの描画結果を返してくれる。いわゆるUISpyツー
             ル。
             他にもEvent監視とかプロパティの表示とか諸々や
             ってくれる。
             所謂神ツール。
             http://snoopwpf.codeplex.com/




13年3月9日土曜日
真打ち登場:
             Blend!Blend!
              そろそろ20分くらい?




13年3月9日土曜日
Blend
             XAML系プラットフォーム用のデザインツール
             一時期はコレなしのWPFは一種の苦行だった
               最近は大分まし。
             Adobe Illustrator的な機能が一部追加されたVisual
             Studioと思っていただければ。


             Visual Studio 2012 Update 2でVS2012にバンドルさ
             れる予定。
               Expressでも使えるようになる!?
               。。。わけではないっぽい

13年3月9日土曜日
Blendでできること
             UIは作りやすいインターフェースになっている
              組込の図形がかなり豊富になっていたり
              カラーパネルが使いやすかったり
              Pathツールも充実していたり




             まぁみてみて。




13年3月9日土曜日
良くあるデモ
             反射テキストボックスを作ってみます。




             ココらへんを使う
              要素の回転・反転
              Visual Brush
                UI要素をそのままBrushとして用いる


13年3月9日土曜日
Blendで作るアニメーション
             アニメーションは非常に簡単に作れる。


             ストーリーボードを開いて、
             変化させたいプロパティをペタペタ変更
             変化の度合いもカスタマイズできる。


             アニメーションの再生にはイベントやトリガー、ビ
             ヘイビアを用いる
             まぁやってみましょう。

13年3月9日土曜日
状態に合わせて色々変える
             コントロールの状態に合わせた挙動を作成できる。
              コントロールに紐づくのでテンプレートの編集か
              ら!
              Visual State Manager(VSM)が使いやすい




             やるよー。




13年3月9日土曜日
エフェクト当てよう
             エフェクト:
              描画の最終段階でかけられるフィルタのようなも
              の。
              画像編集ツールとかについてるあれみたいなもの
              だと思ってもらえれば。
             Blend組込のもので結構遊べる


             サクッと見てみよう。




13年3月9日土曜日
ちょっと脇道: Shazzam
             XAMLで使うEffect用の言語“HLSL”のエディタ。
               HLSL:High Level Shader Language
               DirectXのシェーダに使うのが本来の用途
             直ぐに結果が確認できるばかりか、コンパイルして
             呼び出し用のコード生成までしてくれる。
             割と神。
             http://shazzam-tool.com/


             こんなんです。

13年3月9日土曜日
Behavior
             コントロールに色々な動きを付加する仕組み
              ボタン押したら何かしたり
              マウスで移動できるようにしたり


             カスタム化も結構簡単。
              http://code.msdn.microsoft.com/Behavior-
              beae13a6


             組込のをさらっと紹介するよ―。

13年3月9日土曜日
AIファイルのインポート
             Adobe Illustlatorファイルをインポートできる
              もち、ベクター形式で。




             ネットにおちてるAIファイルを読ませてみたよ。




13年3月9日土曜日
使わないともったいない
              データバインディング
                40分くらいたった?




13年3月9日土曜日
データバインディング
             データ同士を結びつける(バインドする)仕組み。
             あるプロパティとあるプロパティをバインドさせる
             と、その2つは同期して変わる、的な。




             まずは簡単な例から。




13年3月9日土曜日
DEMO:
         UI要素同士のバインディング




13年3月9日土曜日
DataContextとのバインディング
             DataContext??
               全てのWPFコントロールが持つプロパティ
               DataContextに設定されたオブジェクトとも、デ
               ータバインドすることが可能。
               特に指定しないと、親のDataContextをこどもが
               引き継ぐ。


             例えばこんなふうに書けます。




13年3月9日土曜日
バインドされるデータは工夫が必要
             INotifyPropertyChangedの実装は必須
             なかなか面倒くさいので色んなサポートライブラリ
             がある。
              たとえば、Resharperを入れておくと・・・




             WPFのためのアプリケーションフレームワークを使
             えば結構楽になる。


13年3月9日土曜日
あれ?メソッドは?
             ICommandインタフェースを実装することで、メソッ
             ドも(間接的に)呼べます。
             CallMethodActionでメソッドを直接呼ぶことも可
             能。


             データバインドをうまく使えばUI側はXAMLのみで書
             けるようになる
              面倒くさいことを全てフレームワークに押し付け
              られる




13年3月9日土曜日
データバインドのもう一歩先
             ただ単にデータを貼り付けるだけがバインディング
             じゃあありません。
             バインドされたデータをどう表現するか、はXAMLの
             お仕事!


             DataTemplateを使って、データを元にUIを作り出し
             ます。




13年3月9日土曜日
DEMO:
             これがDataTemplate!




13年3月9日土曜日
対応を示すとこんな感じ

        Control          Control

                コントロール
                テンプレート



                                   スタイル
             Data         Data
                  データ
                テンプレート
13年3月9日土曜日
DataTemplateの活用先
             DataTemplateはデータの系列をホストする
             ItemsControl系に必須の機能
              ListBoxとか。
              Tabとか。




13年3月9日土曜日
DataTemplateでできること
             DataTemplateを切り替えることで、同じデータソー
             スに対して違うビューを表現
             データの型ごとに異なる挙動をさせることも可能


             ちょっとだけご紹介。




13年3月9日土曜日
DataBindingの何がすごいのか
             ビューとロジックを切り分ける、というのはもはや
             大規模アプリでは必須の設計
              その際になんらかの中間層を設けるのも常道
             ビューと中間層の同期は更新が多いので、どんなパ
             ターンでも面倒くさい所になる。
             その解決の一つがDataBinding




                                   ロジック
                    ビュー



                           中間層




13年3月9日土曜日
DataBindingの何がすごいのか
             ビューとロジックを切り分ける、というのはもはや
             大規模アプリでは必須の設計
              その際になんらかの中間層を設けるのも常道
             ビューと中間層の同期は更新が多いので、どんなパ
             ターンでも面倒くさい所になる。
             その解決の一つがDataBinding




                                         ロジック
                    ビュー



                                   中間層
                     Bi
                          nd
                           in
                               g
                                !




13年3月9日土曜日
そしてMVVMへ
             MVVM:
               Model   :ロジック
               View    :ビュー
               ViewModel:中間層
             WPF設計パターンの王道
             色々と準備が面倒くさいのでライブラリを用いるのが普
             通。
               Livet   ←オススメ
               MVVM Light Toolkit
               Caliburn Micro

13年3月9日土曜日
まとめ
             そろそろ時間切れ?




13年3月9日土曜日
WPF使おう。
             モダンなUIを作りたいと思ったらもう選択肢はな
             い。
             そんなに描画にこらないとしても、データバインデ
             ィングなどの設計的メリットは大きい。
             XAMLファミリーは増えてきているので、もはやこっ
             ちが汎用性は上。




13年3月9日土曜日
For More Information...
             一般情報
              いわながさん(@ufcppさん)の連載
               http://www.atmarkit.co.jp/ait/subtop/
               features/da/ap_introwpf_index.html
              かずきさん(@okazukiさん)のBlog
               http://d.hatena.ne.jp/okazuki/searchdiary?
               word=%2A%5BWPF%5D
             MVVMとか設計パターンに関して。
              おのうえさん(@ugaya40さん。Livetの作者)
               http://ugaya40.net/

13年3月9日土曜日
本がない(´・ω・`)
             これがまだしも。(英語だけど読みやすい)




             3.5 〜 4.5まで全部持ってる。
             見たい人はみせますよー。

13年3月9日土曜日

More Related Content

Similar to WPFことはじめ

I phoneアプリ入門 第4回
I phoneアプリ入門 第4回I phoneアプリ入門 第4回
I phoneアプリ入門 第4回Sachiko Kajishima
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?SATOSHI TAGOMORI
 
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたらFlashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたらHiroaki Okubo
 
パッチを書いてみよう(第17回Nseg勉強会LT)
パッチを書いてみよう(第17回Nseg勉強会LT)パッチを書いてみよう(第17回Nseg勉強会LT)
パッチを書いてみよう(第17回Nseg勉強会LT)Masahiro Yamada
 
脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptx
脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptx脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptx
脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptxyuukanakajima
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座Masuda Tomoaki
 
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみようJunko Nukaga
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化COLOPL, Inc.
 
Html5 でアプリを作るということ
Html5 でアプリを作るということHtml5 でアプリを作るということ
Html5 でアプリを作るということNaruto TAKAHASHI
 
MBaaS on the Google Cloud - Mobile Backend Starter
MBaaS on the Google Cloud - Mobile Backend StarterMBaaS on the Google Cloud - Mobile Backend Starter
MBaaS on the Google Cloud - Mobile Backend StarterKatsumi Onishi
 
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザインスマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザインinvogue
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7Hiroshi Oyamada
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015Ryo Nakamaru
 
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2Yoshitaka Seo
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdfakiko_pusu
 

Similar to WPFことはじめ (20)

I phoneアプリ入門 第4回
I phoneアプリ入門 第4回I phoneアプリ入門 第4回
I phoneアプリ入門 第4回
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
 
Kifの紹介
Kifの紹介Kifの紹介
Kifの紹介
 
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたらFlashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
Flashじゃなくて HTML5で ビュンビュン動くサイトを 作ってと言われたら
 
Not free
Not freeNot free
Not free
 
パッチを書いてみよう(第17回Nseg勉強会LT)
パッチを書いてみよう(第17回Nseg勉強会LT)パッチを書いてみよう(第17回Nseg勉強会LT)
パッチを書いてみよう(第17回Nseg勉強会LT)
 
脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptx
脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptx脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptx
脱スプレッドシート _GoogleColabで動的なグラフを作成_.pptx
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座
 
Beginning iPhone Vol2
Beginning iPhone Vol2Beginning iPhone Vol2
Beginning iPhone Vol2
 
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
文系デザイナーでも大丈夫!レスポンシブWEBサイトをWordPressで作ってみよう
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化
 
Html5 でアプリを作るということ
Html5 でアプリを作るということHtml5 でアプリを作るということ
Html5 でアプリを作るということ
 
MBaaS on the Google Cloud - Mobile Backend Starter
MBaaS on the Google Cloud - Mobile Backend StarterMBaaS on the Google Cloud - Mobile Backend Starter
MBaaS on the Google Cloud - Mobile Backend Starter
 
K1hash20121024
K1hash20121024K1hash20121024
K1hash20121024
 
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザインスマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
 
機械学習とJubatus
機械学習とJubatus機械学習とJubatus
機械学習とJubatus
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015
 
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf
 

More from Hiroshi Maekawa

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜Hiroshi Maekawa
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間Hiroshi Maekawa
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ーHiroshi Maekawa
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CIHiroshi Maekawa
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI ServiceHiroshi Maekawa
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Hiroshi Maekawa
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React NativeHiroshi Maekawa
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 Hiroshi Maekawa
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜Hiroshi Maekawa
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜Hiroshi Maekawa
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』Hiroshi Maekawa
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情Hiroshi Maekawa
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -Hiroshi Maekawa
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践Hiroshi Maekawa
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポーHiroshi Maekawa
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour OsakaHiroshi Maekawa
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかたHiroshi Maekawa
 

More from Hiroshi Maekawa (20)

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI Service
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React Native
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
 
なれる!IL
なれる!ILなれる!IL
なれる!IL
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポー
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osaka
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかた
 

WPFことはじめ

  • 1. WPF 入門 (ことはじめ) @Posaune 13年3月9日土曜日
  • 2. じこしょーかい まえかわ ひろし a.k.a @Posaune やってること 京都アジャイル勉強会 #京アジャ TABOK勉強会 Blogやってるよ! → http://posaune.hatenablog.com/ 13年3月9日土曜日
  • 3. すきなもの .NET言語 C#, F#, XAML系テクノロジ Emacs歴半年くらい。 ReSharper無しで生きていけない。 TDD アジャイル開発的なあれこれ 自動化(Jenkinsさん) UX, HCD(UCD) Business Model Generation 13年3月9日土曜日
  • 4. さて、本題いきまーす。 3分くらい? 13年3月9日土曜日
  • 6. Windows Presentation Foundation Windows用のプレゼンテーション層向けのフレームワー ク。 Microsoft公式。 描画エンジンがGDIベースからDirectXベースに置き換わ り、いろいろパワーアップ。 主な採用アプリ: Visual StudioなどのMS系ツール Github for Windows Sharp Develop 50分でとても伝えきれる量ではないので、今日はまず、 ほんのさわり。 13年3月9日土曜日
  • 7. よくいわれる表現 「WPFはMicrosoftの最新の描画技術で・・・」 誕生は2006年ですよお客さん。 3.0 → 3.5 → 4.0 → 4.5(Now!) 安定どころかそろそろ枯れてきた気配すら。 同系統の弟妹も沢山(Silverlight, Windows Phone, Win8 ...) (不憫な子が多いとか言うな) VS 2012 SP2ではこれまで5万くらいしてた開発環境 が同梱される気配・・・ 13年3月9日土曜日
  • 10. まずはVS上でご紹介 ここまで5分くらい? 13年3月9日土曜日
  • 11. 柔軟なUIレイアウト Windows Formでよくあること ボタンの中に画像と文字を・・・ コンボボックス内に画像も・・・ タブに閉じるボタンを・・・ こんにちわオーナードロー。 ではWPFは? 13年3月9日土曜日
  • 12. デモ① コントロールが こんなところに。 13年3月9日土曜日
  • 13. 階層化されたUI構造 ボタンの中に入るのは文字でなく、別のUIオブジェクト。 ほとんどのUIオブジェクトは別のUIオブジェクトを格納可 能。 必然的に再帰的な階層構造を持つ。 <Button> <Grid> <TextBlock><Run Text="Click Me!"/></TextBlock> <Image Source="testImage.jpeg" Stretch="Fill"/> </Grid> </Button> 伊達や酔狂でXMLにUI書いてる訳ではないのです。 あ、これをXAMLといいます。 13年3月9日土曜日
  • 14. UI描画はいじり放題 再びWindow Formでよくあること スクロールバーの色変えたい Macみたいなスライダーがいいよ― ボタンももっとMacっぽく・・・ むりなのー?じゃあせめてメトロっぽく! こんにちわオーナードロー ではWPFは? 13年3月9日土曜日
  • 15. デモ②: GDIとは違うのだよ、GDIとは。 13年3月9日土曜日
  • 16. これがWPFの威力です(ドヤァ コントロールの描画はほぼ完全にカスタマイズ可能 ボタンだろうがコンボボックスだろうかスクロー ルバーだろうが。 WPFは、UIの描画部分をStyleとTemplateという仕 組みでカスタマイズ!コレ覚えて帰ってね。 ベクターベースの描画なので、拡大しても くずれない! 拡大・縮小・回転などがプロパティになってる 13年3月9日土曜日
  • 17. StyleとTemplate Style: プロパティの変更セットをリソースとして保持す る仕組み Template: コントロールがどう描画されるか、というUI構造 のテンプレートを保持する。 実行時には展開されてる。 プロパティの一つ。(だからStyleで一緒に管理 することが多い) 13年3月9日土曜日
  • 18. デモ:中身を覗き見して みましょう 13年3月9日土曜日
  • 19. ちょっと脇道:SNOOP WPF開発での必須ツール。 WPFの描画結果を返してくれる。いわゆるUISpyツー ル。 他にもEvent監視とかプロパティの表示とか諸々や ってくれる。 所謂神ツール。 http://snoopwpf.codeplex.com/ 13年3月9日土曜日
  • 20. 真打ち登場: Blend!Blend! そろそろ20分くらい? 13年3月9日土曜日
  • 21. Blend XAML系プラットフォーム用のデザインツール 一時期はコレなしのWPFは一種の苦行だった 最近は大分まし。 Adobe Illustrator的な機能が一部追加されたVisual Studioと思っていただければ。 Visual Studio 2012 Update 2でVS2012にバンドルさ れる予定。 Expressでも使えるようになる!? 。。。わけではないっぽい 13年3月9日土曜日
  • 22. Blendでできること UIは作りやすいインターフェースになっている 組込の図形がかなり豊富になっていたり カラーパネルが使いやすかったり Pathツールも充実していたり まぁみてみて。 13年3月9日土曜日
  • 23. 良くあるデモ 反射テキストボックスを作ってみます。 ココらへんを使う 要素の回転・反転 Visual Brush UI要素をそのままBrushとして用いる 13年3月9日土曜日
  • 24. Blendで作るアニメーション アニメーションは非常に簡単に作れる。 ストーリーボードを開いて、 変化させたいプロパティをペタペタ変更 変化の度合いもカスタマイズできる。 アニメーションの再生にはイベントやトリガー、ビ ヘイビアを用いる まぁやってみましょう。 13年3月9日土曜日
  • 25. 状態に合わせて色々変える コントロールの状態に合わせた挙動を作成できる。 コントロールに紐づくのでテンプレートの編集か ら! Visual State Manager(VSM)が使いやすい やるよー。 13年3月9日土曜日
  • 26. エフェクト当てよう エフェクト: 描画の最終段階でかけられるフィルタのようなも の。 画像編集ツールとかについてるあれみたいなもの だと思ってもらえれば。 Blend組込のもので結構遊べる サクッと見てみよう。 13年3月9日土曜日
  • 27. ちょっと脇道: Shazzam XAMLで使うEffect用の言語“HLSL”のエディタ。 HLSL:High Level Shader Language DirectXのシェーダに使うのが本来の用途 直ぐに結果が確認できるばかりか、コンパイルして 呼び出し用のコード生成までしてくれる。 割と神。 http://shazzam-tool.com/ こんなんです。 13年3月9日土曜日
  • 28. Behavior コントロールに色々な動きを付加する仕組み ボタン押したら何かしたり マウスで移動できるようにしたり カスタム化も結構簡単。 http://code.msdn.microsoft.com/Behavior- beae13a6 組込のをさらっと紹介するよ―。 13年3月9日土曜日
  • 29. AIファイルのインポート Adobe Illustlatorファイルをインポートできる もち、ベクター形式で。 ネットにおちてるAIファイルを読ませてみたよ。 13年3月9日土曜日
  • 30. 使わないともったいない データバインディング 40分くらいたった? 13年3月9日土曜日
  • 31. データバインディング データ同士を結びつける(バインドする)仕組み。 あるプロパティとあるプロパティをバインドさせる と、その2つは同期して変わる、的な。 まずは簡単な例から。 13年3月9日土曜日
  • 32. DEMO: UI要素同士のバインディング 13年3月9日土曜日
  • 33. DataContextとのバインディング DataContext?? 全てのWPFコントロールが持つプロパティ DataContextに設定されたオブジェクトとも、デ ータバインドすることが可能。 特に指定しないと、親のDataContextをこどもが 引き継ぐ。 例えばこんなふうに書けます。 13年3月9日土曜日
  • 34. バインドされるデータは工夫が必要 INotifyPropertyChangedの実装は必須 なかなか面倒くさいので色んなサポートライブラリ がある。 たとえば、Resharperを入れておくと・・・ WPFのためのアプリケーションフレームワークを使 えば結構楽になる。 13年3月9日土曜日
  • 35. あれ?メソッドは? ICommandインタフェースを実装することで、メソッ ドも(間接的に)呼べます。 CallMethodActionでメソッドを直接呼ぶことも可 能。 データバインドをうまく使えばUI側はXAMLのみで書 けるようになる 面倒くさいことを全てフレームワークに押し付け られる 13年3月9日土曜日
  • 36. データバインドのもう一歩先 ただ単にデータを貼り付けるだけがバインディング じゃあありません。 バインドされたデータをどう表現するか、はXAMLの お仕事! DataTemplateを使って、データを元にUIを作り出し ます。 13年3月9日土曜日
  • 37. DEMO: これがDataTemplate! 13年3月9日土曜日
  • 38. 対応を示すとこんな感じ Control Control コントロール テンプレート スタイル Data Data データ テンプレート 13年3月9日土曜日
  • 39. DataTemplateの活用先 DataTemplateはデータの系列をホストする ItemsControl系に必須の機能 ListBoxとか。 Tabとか。 13年3月9日土曜日
  • 40. DataTemplateでできること DataTemplateを切り替えることで、同じデータソー スに対して違うビューを表現 データの型ごとに異なる挙動をさせることも可能 ちょっとだけご紹介。 13年3月9日土曜日
  • 41. DataBindingの何がすごいのか ビューとロジックを切り分ける、というのはもはや 大規模アプリでは必須の設計 その際になんらかの中間層を設けるのも常道 ビューと中間層の同期は更新が多いので、どんなパ ターンでも面倒くさい所になる。 その解決の一つがDataBinding ロジック ビュー 中間層 13年3月9日土曜日
  • 42. DataBindingの何がすごいのか ビューとロジックを切り分ける、というのはもはや 大規模アプリでは必須の設計 その際になんらかの中間層を設けるのも常道 ビューと中間層の同期は更新が多いので、どんなパ ターンでも面倒くさい所になる。 その解決の一つがDataBinding ロジック ビュー 中間層 Bi nd in g ! 13年3月9日土曜日
  • 43. そしてMVVMへ MVVM: Model :ロジック View :ビュー ViewModel:中間層 WPF設計パターンの王道 色々と準備が面倒くさいのでライブラリを用いるのが普 通。 Livet ←オススメ MVVM Light Toolkit Caliburn Micro 13年3月9日土曜日
  • 44. まとめ そろそろ時間切れ? 13年3月9日土曜日
  • 45. WPF使おう。 モダンなUIを作りたいと思ったらもう選択肢はな い。 そんなに描画にこらないとしても、データバインデ ィングなどの設計的メリットは大きい。 XAMLファミリーは増えてきているので、もはやこっ ちが汎用性は上。 13年3月9日土曜日
  • 46. For More Information... 一般情報 いわながさん(@ufcppさん)の連載 http://www.atmarkit.co.jp/ait/subtop/ features/da/ap_introwpf_index.html かずきさん(@okazukiさん)のBlog http://d.hatena.ne.jp/okazuki/searchdiary? word=%2A%5BWPF%5D MVVMとか設計パターンに関して。 おのうえさん(@ugaya40さん。Livetの作者) http://ugaya40.net/ 13年3月9日土曜日
  • 47. 本がない(´・ω・`) これがまだしも。(英語だけど読みやすい) 3.5 〜 4.5まで全部持ってる。 見たい人はみせますよー。 13年3月9日土曜日