SlideShare a Scribd company logo
XAML⼊⾨
2017/01/28
JXUGC #22 最新事例&お前のアプリを説明してもらおうの会
⼤⽥ ⼀希
⾃⼰紹介
• Name
• ⼤⽥ ⼀希(かずき)
• Twitter
• @okazuki
• 仕事
• 都内でSIer
• Blog
• かずきのBlog@hatena
http://blog.okazuki.jp/
• OSS
• ReactiveProperty
https://github.com/runceel/ReactiveProperty
• その他
• Microsoft MVP for Windows Development
最近書いたもの
• かずきのXamarin.Forms⼊⾨
• SlideShare
http://www.slideshare.net/okazuki0130/xamarinforms-70553057
• Kindle
https://www.amazon.co.jp/dp/B01N7NI08L
お約束事項
• 掲載内容は個⼈の⾒解であり、所属する企業を代表するもので
はありません。
今⽇のゴール
• なんとなくXAMLを書くから理解して書いてもらう
XAMLの歴史
Windows Presentation Foundation
• .NET Framework 3.0で追加されたGUIフレームワーク
• 2006年11⽉リリース
• クラシックデスクトップアプリケーションを作るための現在の
デファクトスタンダード(だと信じてる)
XAML
WPFの画⾯記述⾔語として登場
流れ
WPF
Silverlight
Windows Phone
/ Windows
store app
UWP /
Xamarin.Forms
XAMLとは
XAML(ザムル)
eXtensible Application Markup Language
XAML
UI記述特化⾔語ではない
XAML
オブジェクトのインスタンスを
組み⽴てるための⾔語
XAML
インスタンスを組み⽴てる???
例えばこんなクラス
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public List<Person> Children { get; } = new List<Person>();
}
インスタンスを組み⽴てる
new Person
{
Name = “Tanaka”,
Age = 10,
Children =
{
new Person { Name = “Kimura”, Age = 12 },
new Person { Name = “Ohta”, Age = 13 },
}
};
XAMLとは
• これをするための⾔語
new Person
{
Name = “Tanaka”,
Age = 10,
Children =
{
new Person { Name = “Kimura”, Age = 12 },
new Person { Name = “Ohta”, Age = 13 },
}
};
XAMLとC#の対⽐
• XML名前空間
• C#の名前空間
• XMLのタグ名
• C#のクラス名
• XMLの属性
• C#のプロパティ名
つまり…
using Sample;
new Person
{
Name = “Tanaka”,
Age = 12,
};
<Person
xmlns=“clr-namespace:Sample”
Name=“Tanaka”
Age=“12” />
もうちょっとXAML
プロパティ要素構⽂
• タグでプロパティを記述する構⽂
<Person Name=“Tanaka” />
<Person>
<Person.Name>Tanaka</Person.Name>
</Person>
こういうオブジェクトをマークアップできる
class Person
{
public string Name { get; set; }
public Person Child { get; set; }
}
こうなる
<Person Name=“Tanaka”>
<Person.Child>
<Person Name=“Kimura” />
</Person.Child>
</Person>
コレクションの構⽂
コレクションを⾃然にマークアップできる
例えばこんなクラスを
class Person
{
public string Name { get; set; }
public List<Person> Children { get; } = new List<Person>();
}
こうマークアップできる
<Person Name=“Tanaka”>
<Person.Children>
<Person Name=“Kimura” />
<Person Name=“Homuhomu” />
<Person Name=“Ohta” />
</Person.Children>
</Person>
new Person
{
Name = “Tanaka”,
Children =
{
new Person { … },
new Person { … },
new Person { … },
}
};
XAML コンテンツ プロパティ
• 1つだけプロパティ名を省略して
書くことができるプロパティを
指定できる
XAML コンテンツ プロパティ
• ContentPropertyAttributeでクラス単位に指定
[ContentProperty(“Child”)]
class Person
{
public string Name { get; set; }
public Person Child { get; set; }
}
XAML コンテンツ プロパティ
<Person Name=“Tanaka”>
<Person.Child>
<Person Name=“Ohta” />
</Person.Child>
</Person>
<Person Name=“Tanaka”>
<Person Name=“Ohta” />
</Person>
コレクション構⽂と組み合わせると…
[ContentProperty(“Children”)]
class Person
{
public string Name { get; set; }
public List<Person> Children { get; } = new List<Person>();
}
こうなる
<Person Name=“Tanaka”>
<Person Name=“Kimura” />
<Person Name=“Homuhomu” />
<Person Name=“Ohta” />
</Person>
添付プロパティ
他のクラスのプロパティを設定できる構⽂
添付プロパティ
<Button Text=“Hello world”
Grid.Row=“2”
Grid.Column=“3” />
var b = new Button { Text = “Hello world” };
Grid.SetRow(b, 2);
Grid.SetColumn(b, 3);
マークアップ拡張
• 以下のようなものを簡単に書く⽅法
• XAMLで正直に書くとめんどくさいもの
• XAMLでは書けないようなもの
例:StaticResource
• StaticResourceは、Resourcesというプロパティに定義された
値をひっぱってくる機能
<Label.Style>
<x:StaticResource Key=“hogeStyle” />
</Label.Style>
Style=“{StaticResource hogeStyle}”
まとめ
まとめ
• XAMLはオブジェクトを組み⽴てるための⾔語
• 対応付けを覚えよう
• タグ名→クラス名
• XML名前空間→C#の名前空間
• 属性→プロパティ
• 属性名.プロパティ名という特殊な書き⽅もある
• 後付けプロパティが出来る添付プロパティがある
• コンテンツプロパティを把握しよう
• マークアップ拡張は簡単に書けないものを簡単に書く仕組み
まとめ
XAMLを理解して良いXamarin.Formsライフを!
(WPFやUWPも宜しくね)

More Related Content

PDF
WPF4.5入門
PDF
Reactive extensions入門v0.1
PDF
MagicOnion入門
PDF
Railsで作るBFFの功罪
PDF
ARでVRアバターを表示するシステムを構築しよう
PDF
Twitterのsnowflakeについて
PDF
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
WPF4.5入門
Reactive extensions入門v0.1
MagicOnion入門
Railsで作るBFFの功罪
ARでVRアバターを表示するシステムを構築しよう
Twitterのsnowflakeについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話

What's hot (20)

PDF
【Unite Tokyo 2019】AWS for Unity Developers
PDF
かずきのUWP入門
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PDF
UniRx完全に理解した
PDF
ドメイン駆動設計サンプルコードの徹底解説
PPTX
Redisの特徴と活用方法について
PDF
例外設計における大罪
PDF
Steam ゲーム内購入 サーバーサイド実装について
PDF
WebSocket / WebRTCの技術紹介
PDF
怖くないSpring Bootのオートコンフィグレーション
PDF
ソーシャルゲームのためのデータベース設計
PPTX
RPGにおけるイベント駆動型の設計と実装
PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
PDF
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
PDF
今さらWPF? いいえ、今こそWPF!
【Unite Tokyo 2019】AWS for Unity Developers
かずきのUWP入門
ドメインオブジェクトの見つけ方・作り方・育て方
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
UniRx完全に理解した
ドメイン駆動設計サンプルコードの徹底解説
Redisの特徴と活用方法について
例外設計における大罪
Steam ゲーム内購入 サーバーサイド実装について
WebSocket / WebRTCの技術紹介
怖くないSpring Bootのオートコンフィグレーション
ソーシャルゲームのためのデータベース設計
RPGにおけるイベント駆動型の設計と実装
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
今さらWPF? いいえ、今こそWPF!
Ad

Similar to XAML入門 (11)

PDF
エンジニア戦記 〜小さなチーム、大きな未来〜
PDF
2017 年度を振り返って ~アウトプット編~
PDF
ユーザーストーリーワークショップ
PDF
第5回 cogbot勉強会!
PPTX
フロントエンドエンジニアに伝えたい 常時SSLとCDNの話
PDF
JSDoc ToolKit
KEY
Cmsインサイド 120801 公開版
PDF
Elastic circle ci-co-webinar-20210127
PDF
Ecmascript2015とその周辺について
PDF
WordBench Saitama vol.6
PDF
深層強化学習 Pydata.Okinawa Meetup #22
エンジニア戦記 〜小さなチーム、大きな未来〜
2017 年度を振り返って ~アウトプット編~
ユーザーストーリーワークショップ
第5回 cogbot勉強会!
フロントエンドエンジニアに伝えたい 常時SSLとCDNの話
JSDoc ToolKit
Cmsインサイド 120801 公開版
Elastic circle ci-co-webinar-20210127
Ecmascript2015とその周辺について
WordBench Saitama vol.6
深層強化学習 Pydata.Okinawa Meetup #22
Ad

More from 一希 大田 (20)

PDF
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
PDF
Power Apps + C#
PDF
Azure Static Web Apps を試してみた!
PDF
Visual studio 2019 updates pickup!
PPTX
.NET 5 and Windows app dev
PDF
Uno Platform 触ってみた
PDF
WPF on .NET Core 3.1 で Windows 10 アプリ開発
PDF
.NET Core 3.0 + Windows 10 で WPF 開発
PDF
はじめよう Azure Functions
PDF
Windows 10 対応のデスクトップアプリを作る技術(事前公開版v2)
PDF
Xamarin.Forms アプリケーション 設計パターン
PDF
Windows 10 対応のデスクトップアプリを 作る技術(事前公開版)
PPTX
WPF on .NET Core 3.0
PDF
Visual Studio 2019 の個人的なお勧め機能(発表時点)
PDF
Visual Studio 2019 の個人的なお勧め機能
PDF
Windows 10 に対応した デスクトップ アプリを作る技術(事前公開版 v2)
PDF
事前公開版 Windows 10 に対応したデスクトップ アプリを作る技術 v1
PDF
スマートスピーカーのバックエンドで Azure を使う方法
PPTX
Visual Studio App center 概要
PDF
はじめての HoloLens セッションの集大成お見せします!
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
Power Apps + C#
Azure Static Web Apps を試してみた!
Visual studio 2019 updates pickup!
.NET 5 and Windows app dev
Uno Platform 触ってみた
WPF on .NET Core 3.1 で Windows 10 アプリ開発
.NET Core 3.0 + Windows 10 で WPF 開発
はじめよう Azure Functions
Windows 10 対応のデスクトップアプリを作る技術(事前公開版v2)
Xamarin.Forms アプリケーション 設計パターン
Windows 10 対応のデスクトップアプリを 作る技術(事前公開版)
WPF on .NET Core 3.0
Visual Studio 2019 の個人的なお勧め機能(発表時点)
Visual Studio 2019 の個人的なお勧め機能
Windows 10 に対応した デスクトップ アプリを作る技術(事前公開版 v2)
事前公開版 Windows 10 に対応したデスクトップ アプリを作る技術 v1
スマートスピーカーのバックエンドで Azure を使う方法
Visual Studio App center 概要
はじめての HoloLens セッションの集大成お見せします!

XAML入門