SlideShare una empresa de Scribd logo
1 de 45
ちょっとだけ、昔話
アプリケーションの画面は
どうやって定義していましたか?
色々あって
最近はあまり使われなくなりましたが
Webで動きのある画面を作ろうと思えば、
Flashで、という時代がありました。
いや・・・言いたいことは色々ありますが、
画面定義の話に戻りましょう。
タイムラインという
フレーム毎に画面を定義していました。
動画編集の考え方に近いアプローチ
当時のFlashは
アニメーション作成用途が強かったので、
アニメーションを作成しやすい方法。
画面定義をテキストで表現できなかったので、
差分が取れない。
・・・バイナリを解析できれば差分も・・・
余談:AS2時代は
それぞれのオブジェクトに
スクリプトを記述できたので、
作り方によっては更にカオスなことに・・・
その後、AS3や、
Adobe Flexの登場で
この辺が変化していくのですが、
ひとまず置いておいて・・・
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(33, 109);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
プログラムコードを
解析してデザイナーに表示。
メリット:差分が見れる
デメリット:コードからデザインは把握し辛い・・・
ご存知、XMLタグで画面を定義する方法。
XAMLもこの発想。
Flashにもmxmlというのがあった・・・
メリット:差分が取れる
:プログラミングの知識無しに扱える
デメリット:アニメーションなど複雑なものは
定義できない。
デメリットと書いたが、
アニメーションなどを定義できないことで、
逆にシンプルで良い気がする。
デザイナーにもプログラマーにも触れるという
ラインのバラスを上手く取っている?
XAML登場!!
スライド15枚めにして
(Zガンダムよりは早い当社比)
XMLで画面を定義する方式。
アニメーションや、
コントロールの雛形も定義可能
この辺は良し悪し
タグで定義できるという点では
HTMLに近いが、
どちらかというとWindows Formsの
コード→デザイナ
を発展させた
コード→XAML→デザイナ
という構造(後述)。
デザイナーとプログラマーの
分業が成立する前提で見るか?
デザイナーが主に使うのか?
プログラマーが主に使うのか?
分業できていることが多いのはHTML
デザイナーメインなFlashタイムライン
プログラマーメインなWindows Forms
eXtensible Application Markup Language
Application? Avalon?
<Button />
<Button></Button>
<ButtonText=“プロパティ”/>
<Button>ボタン</Button>
<ButtonText=“ボタン” />
コレはイコール。
じゃあ入れ子にした部分は、Textプロパティに該当?
<Button><Image src=“hoge.jpg”></Button>
これは?
入れ子の部分はContentPropertyとして
扱われる
// Buttonの親クラスの記述
[Composable(typeof(IContentControlFactory), CompositionT
[ContentProperty(Name = "Content")]
[MarshalingBehavior(MarshalingType.Agile)]
// Objectを受け入れる。結構広い間口
public System.Object Content { get; set; }
<Image Source="Assets/LockScreenLogo.png"/>
これUri型なのに、文字列で指定できるの?
型コンバーターという仕組みが、
いい感じに変換してくれる。
XAMLを拡張する記法
基本的に{}に囲まれたやつ
Text="{x:BindViewModel.Name, Mode=TwoWay}"
XAMLを拡張する記法
基本的に{}に囲まれたやつ
Text="{x:BindViewModel.Name, Mode=TwoWay}“
プラットフォーム毎に異なる仕様だが、
基本的に同じ機能があることが多い。
上のx:BindはUWPから追加されたもの。
画面を定義するXAMLには
コードビハインドとしてロジックを記述するための
プログラムファイルがある。
例:MainPage.xamlとMainPage.xaml.cs
コードビハインドの中間
MainPage.g.cs MainPage.g.i.cs
XAMLが元々、プログラムコードを、
見た目(XAML)とロジック(プログラムコード)
に分離するためのものであるため、
プログラムの画面を定義する部分を、
XML形式で表現できるようにしたもの。
この辺がHTMLとの大きな違い。
<ButtonText= “hoge”/>
以下は等価
Button btn = new Button();
btn.Content = "hoge";
mainGrid.Children.Add(btn);
XAML自体は、こんな感じで、
シンプル。
XAMLを使って
コントロール、アニメーション、3D…など
様々なものを表現するので複雑に見える。
プロパティで変えれるパターン
テンプレート、スタイルで変えるパターン
(こっちがちょっとわかりづらい)
ListViewの場合
ListView自体のテンプレート
ListViewで繰り返し表示されるデータのテンプレート
リスト表示されるアイテムのテンプレートListView自体のテンプレート
ボタンの場合
→テンプレートの編集
イベントハンドラー
XAMLからコードビハインドのメソッドを呼び出す
プログラミングのプロパティと
XAMLのプロパティを紐付ける
疎結合
This.textbox.text = “ほげ”;
が不要になる。
XAMLのプロパティ同士も紐付けれる
デザインに必要なら、
条件分岐のような判定もできるようにする。
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720" />
</VisualState.StateTriggers>
アニメーションもXAMLで定義可能
編集はタイムライン方式(Adobe Flashもそう)
アニメーションもXAMLで表現
・・・まぁ、読むのも難しいし、手打ちだと書けないよね・・・
<Storyboard x:Name="Storyboard1">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransf
<EasingDoubleKeyFrame KeyTime="0"Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:1"Value="208"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransf
<EasingDoubleKeyFrame KeyTime="0"Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:1"Value="-156"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
色々なことができるマークアップ
これまでのUI表現の歴史をうまく取り込んでいる

Más contenido relacionado

Destacado

Destacado (11)

かずきのUWP入門
かずきのUWP入門かずきのUWP入門
かずきのUWP入門
 
XAML入門
XAML入門XAML入門
XAML入門
 
Uwpでみるxaml入門第二回
Uwpでみるxaml入門第二回Uwpでみるxaml入門第二回
Uwpでみるxaml入門第二回
 
独自Ecサイト立ち上げワンストップセミナー 0907
独自Ecサイト立ち上げワンストップセミナー 0907独自Ecサイト立ち上げワンストップセミナー 0907
独自Ecサイト立ち上げワンストップセミナー 0907
 
これからはじめる XAML - WPF プログラミング
これからはじめる XAML - WPF プログラミングこれからはじめる XAML - WPF プログラミング
これからはじめる XAML - WPF プログラミング
 
Azure上でec cubeを運用するポイント
Azure上でec cubeを運用するポイントAzure上でec cubeを運用するポイント
Azure上でec cubeを運用するポイント
 
2016年11月.NETラボLT:超余談ゲームプラットフォームの話
2016年11月.NETラボLT:超余談ゲームプラットフォームの話2016年11月.NETラボLT:超余談ゲームプラットフォームの話
2016年11月.NETラボLT:超余談ゲームプラットフォームの話
 
はじめての UWP アプリ開発
はじめての UWP アプリ開発はじめての UWP アプリ開発
はじめての UWP アプリ開発
 
Uwpアプリケーション開発入門
Uwpアプリケーション開発入門Uwpアプリケーション開発入門
Uwpアプリケーション開発入門
 
しごとで使うTitanium 第2版
しごとで使うTitanium 第2版しごとで使うTitanium 第2版
しごとで使うTitanium 第2版
 
10分でわかる無料になったXamarin
10分でわかる無料になったXamarin10分でわかる無料になったXamarin
10分でわかる無料になったXamarin
 

Más de Makoto Nishimura

Más de Makoto Nishimura (20)

リモートで技術を伝える方法(発表版)
リモートで技術を伝える方法(発表版)リモートで技術を伝える方法(発表版)
リモートで技術を伝える方法(発表版)
 
リモートで技術を伝える方法(フル)
リモートで技術を伝える方法(フル)リモートで技術を伝える方法(フル)
リモートで技術を伝える方法(フル)
 
windows terminal入門
windows terminal入門windows terminal入門
windows terminal入門
 
Minecraftでプログラミングを学べるって本当?
Minecraftでプログラミングを学べるって本当?Minecraftでプログラミングを学べるって本当?
Minecraftでプログラミングを学べるって本当?
 
Power Automateを使ってみた
Power Automateを使ってみたPower Automateを使ってみた
Power Automateを使ってみた
 
Power Automate Desktop入門
Power Automate Desktop入門Power Automate Desktop入門
Power Automate Desktop入門
 
Microsoft Teams Custom
Microsoft Teams CustomMicrosoft Teams Custom
Microsoft Teams Custom
 
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
 
AzureDevOpsの機能解説
AzureDevOpsの機能解説AzureDevOpsの機能解説
AzureDevOpsの機能解説
 
EC-CUBE 4 入門
EC-CUBE 4 入門EC-CUBE 4 入門
EC-CUBE 4 入門
 
OSS開発で.NETを活用してDevOps
OSS開発で.NETを活用してDevOpsOSS開発で.NETを活用してDevOps
OSS開発で.NETを活用してDevOps
 
.NETの最近
.NETの最近.NETの最近
.NETの最近
 
Amazon echoがやってきた
Amazon echoがやってきたAmazon echoがやってきた
Amazon echoがやってきた
 
2017年度注目の.netテクノロジー
2017年度注目の.netテクノロジー2017年度注目の.netテクノロジー
2017年度注目の.netテクノロジー
 
Xamarin入門(技術というより心構え編)
Xamarin入門(技術というより心構え編)Xamarin入門(技術というより心構え編)
Xamarin入門(技術というより心構え編)
 
初心者目線でIo t
初心者目線でIo t初心者目線でIo t
初心者目線でIo t
 
Universal windows platformの新機能をおさえよう
Universal windows platformの新機能をおさえようUniversal windows platformの新機能をおさえよう
Universal windows platformの新機能をおさえよう
 
2016年注目の.netテクノロジー
2016年注目の.netテクノロジー2016年注目の.netテクノロジー
2016年注目の.netテクノロジー
 
Uwpハンズオン参加レポート
Uwpハンズオン参加レポートUwpハンズオン参加レポート
Uwpハンズオン参加レポート
 
Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介
 

Uwpでみるxaml入門