SlideShare a Scribd company logo
1 of 38
Download to read offline
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

What's hot

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介
「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介
「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介
ssuser05b05e
 
超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方
Cake YOSHIDA
 

What's hot (20)

Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目
 
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
WPF MVVM Review
WPF MVVM ReviewWPF MVVM Review
WPF MVVM Review
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
Spring 歴約1年初心者の Test 奮闘記
Spring 歴約1年初心者の Test 奮闘記Spring 歴約1年初心者の Test 奮闘記
Spring 歴約1年初心者の Test 奮闘記
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介
「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介
「Terraform」と連携して自動構築を実現するシステムライフサイクル効率化支援OSS「Exastro IT Automation」のご紹介
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目
 
超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方
 

Similar to XAML入門

Cmsインサイド 120801 公開版
Cmsインサイド 120801 公開版Cmsインサイド 120801 公開版
Cmsインサイド 120801 公開版
株式会社RYUS
 

Similar to XAML入門 (11)

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

More from 一希 大田

More from 一希 大田 (20)

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

Recently uploaded

Recently uploaded (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

XAML入門