SlideShare a Scribd company logo
1 of 33
/ 32
XAML Islands
その2
1
城東.NET #29
2019年02月20日
石崎 充良
/ 32
自己紹介
石崎 充良 ( @mishi_cs )
Japan Xamarin Users Group ( JXUG )
Microsoft MVP for Developer Technologies
言語: C# XAML
活動:
・JXUG (もくもく会) (connpass)
・城東.NET Users Group (connpass)
・C# もくもく会 (connpass)
※主に秋葉原
2
/ 32
XAML Standard
とは関係ありません
3
/ 32
XAML Standard とは
・文法の基本は同じだが、複数のプラットフォーム毎の要素の実装差により同じ XAML
が書けない。
・プラットフォーム毎に要素のプロパティなど API を統一しようという夢の規格。
https://github.com/Microsoft/xaml-standard/commits/staging
https://github.com/Microsoft/xaml-standard
4
/ 32
実装
https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/xaml/standard/
5
/ 32
XAML Islands
6
/ 32
Windows 最新機能が使える
・WPF や Windows フォームアプリケーションで Windows 最新機能が使える夢の技術
・Windows 最新機能 = UWP で実装される
・UWP のコントロールが WPF や Windows フォームで使える
・October 2018 Update で使えるようになった (まだ問題はある)
7
/ 32
なぜ WPF や Windows フォーム?
・WPF などのデスクトップ技術にはまだまだメリットがある
( 配布・インストーラ・ファイルアクセス… )
・新機能は UWP (だけ)に追加される
・デスクトップアプリを UWP のインストールフォーマットで包んでストアで配信する
ことも UWP という扱いにまでなった
・UWP の未来は… Hololens?
8
/ 32
UWP コントロールが使える
9
・WPF には ProgressRing がない (自作したり、外部ライブラリなどはある)
・WPF ももう10年前の技術
/ 32
始め方
10
/ 32
手順
・普通にプロジェクトを作る
・NuGet からパッケージをインストール
・プロジェクトに UWP 関係の参照を追加
・WindowsXamlHost コントロール(NuGet パッケージ内に有) を画面に配置
・WindowsXamlHost コントロールのプロパティに生成するコントロール名を設定
・WindowsXamlHost コントロール ChildChanged イベントで生成されたコントロール
の設定を行う
11
/ 32
普通にプロジェクトを作る
・普通にプロジェクトを作ります
12
/ 32
NuGet からパッケージをインストール
・NuGet からパッケージをインストール
または
13
/ 32
プロジェクトに UWP 関係の参照を追加
・コントロールを表示するだけなら参照の追加は 2 件で OK
※プロパティの設定などを行うには他にも参照が必要
14
/ 32
追加する参照の全容
・それぞれ何に必要かは未検証です。
15https://docs.microsoft.com/ja-jp/windows/uwp/porting/desktop-to-uwp-enhance#first-set-up-your-project
/ 32
WindowsXamlHost を画面に配置
xmlns の追加
Xamlhost エレメントの配置
16
xmlns:xamlhost="clr-namespace:Microsoft.Toolkit.Wpf.UI.XamlHost;assembly=Microsoft.Toolkit.Wpf.UI.XamlHost"
/ 32
生成するコントロール名を設定
生成するコントロール名を設定
17
/ 32
ChildChanged でコントロールの設定
コントロールが生成されると ChildChanged イベントが発生する
(破棄のタイミングでも発生するので注意)
18
/ 32
実行
※現在 DPI 関係に未対応事項あり
19
/ 32
コントロール
20
/ 32
使えると書かれているコントロール
・WebView
・WebViewCompatible
・InkCanvas
・InkToolbar
・MediaPlayerElement
21https://docs.microsoft.com/ja-jp/windows/uwp/xaml-platform/xaml-host-controls
/ 32
WindowsXamlHost 不要
22
/ 32
NuGet パッケージ追加
23
/ 32
実行
24
/ 32
参照の追加不要
・これらの参照を追加 しませんでした
25https://docs.microsoft.com/ja-jp/windows/uwp/porting/desktop-to-uwp-enhance#first-set-up-your-project
/ 32
もう一つの
コントロール
生成方法
26
/ 32
コードで生成すると楽そう
27
UWP のコントロールは普通に
ビハインドコードでインスタンス化できる
UI に置くには、XamlHost コントロールの
中に入れなければならない
/ 32
おまじないについて
・UWP のコントロールを生む際に、「そのスレッド上で」一度呼んでおく必要がある。
・UI スレッドなら、イベントハンドラを超えて同じスレッドなので一度呼んで置けば
特に気にする必要はない。
・XamlHost をインスタンス化すると、呼ばなくてよい(内部で呼ばれている?)
・XamlHost は Xaml でインスタンス化しておけば、InitializeCompomemt() で完了し
ているのでより気にしなくてよい。
28
/ 32
試してみましょう
29
おまじない無しだと例外
先に XamlHost を
インスタンス化すれば
おまじない不要
/ 32
コンテナも使える これでいいのでは?
30
/ 32
ほぼ全てのコントロールが使える
31https://rksoftware.hatenablog.com/entry/2019/01/20/193954
/ 32
まとめ
・HoloLens でないなら、もうこれでいいのでは?
32
/ 32
ありがとうございました!
33

More Related Content

Similar to XAML Islands その2

Cross-Platform ができる Xamarin について
Cross-Platform ができる Xamarin についてCross-Platform ができる Xamarin について
Cross-Platform ができる Xamarin についてm ishizaki
 
Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2m ishizaki
 
Uno Platform 入門
Uno Platform 入門Uno Platform 入門
Uno Platform 入門m ishizaki
 
Bait and switch
Bait and switchBait and switch
Bait and switchm ishizaki
 
WPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめないWPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめないm ishizaki
 
UWPでもDataTable
UWPでもDataTableUWPでもDataTable
UWPでもDataTablem ishizaki
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法Yoshito Tabuchi
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法Yoshito Tabuchi
 
デスクトップアプリ最新事情201912
デスクトップアプリ最新事情201912デスクトップアプリ最新事情201912
デスクトップアプリ最新事情201912m ishizaki
 
Xamarin で始めるクロスプラットフォーム開発
Xamarin で始めるクロスプラットフォーム開発Xamarin で始めるクロスプラットフォーム開発
Xamarin で始めるクロスプラットフォーム開発m ishizaki
 
Xamarin の Api カバー率 100% について
Xamarin の Api カバー率 100% についてXamarin の Api カバー率 100% について
Xamarin の Api カバー率 100% についてm ishizaki
 
Xamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみたXamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみたm ishizaki
 
.NET Standard で PostgreSql を使ってみた
.NET Standard で PostgreSql を使ってみた.NET Standard で PostgreSql を使ってみた
.NET Standard で PostgreSql を使ってみたm ishizaki
 
Uno Platform さわってみた
Uno Platform さわってみたUno Platform さわってみた
Uno Platform さわってみたm ishizaki
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発m ishizaki
 
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版m ishizaki
 

Similar to XAML Islands その2 (20)

XAML Islands
XAML IslandsXAML Islands
XAML Islands
 
XAML Standard
XAML StandardXAML Standard
XAML Standard
 
ARCore
ARCoreARCore
ARCore
 
Cross-Platform ができる Xamarin について
Cross-Platform ができる Xamarin についてCross-Platform ができる Xamarin について
Cross-Platform ができる Xamarin について
 
Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
 
Uno Platform 入門
Uno Platform 入門Uno Platform 入門
Uno Platform 入門
 
Bait and switch
Bait and switchBait and switch
Bait and switch
 
WPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめないWPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめない
 
UWPでもDataTable
UWPでもDataTableUWPでもDataTable
UWPでもDataTable
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法
 
Realm
RealmRealm
Realm
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法
 
デスクトップアプリ最新事情201912
デスクトップアプリ最新事情201912デスクトップアプリ最新事情201912
デスクトップアプリ最新事情201912
 
Xamarin で始めるクロスプラットフォーム開発
Xamarin で始めるクロスプラットフォーム開発Xamarin で始めるクロスプラットフォーム開発
Xamarin で始めるクロスプラットフォーム開発
 
Xamarin の Api カバー率 100% について
Xamarin の Api カバー率 100% についてXamarin の Api カバー率 100% について
Xamarin の Api カバー率 100% について
 
Xamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみたXamarin.Forms.WPF を試してみた
Xamarin.Forms.WPF を試してみた
 
.NET Standard で PostgreSql を使ってみた
.NET Standard で PostgreSql を使ってみた.NET Standard で PostgreSql を使ってみた
.NET Standard で PostgreSql を使ってみた
 
Uno Platform さわってみた
Uno Platform さわってみたUno Platform さわってみた
Uno Platform さわってみた
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
 
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
.NET Core でデスクトップアプリ Visual Studio 2019 Preview 版
 

More from m ishizaki

継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#m ishizaki
 
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#m ishizaki
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET するm ishizaki
 
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話m ishizaki
 
「スタバ」する話
「スタバ」する話「スタバ」する話
「スタバ」する話m ishizaki
 
エンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについてエンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについてm ishizaki
 
Build 2022 / Uno Platform
Build 2022 / Uno PlatformBuild 2022 / Uno Platform
Build 2022 / Uno Platformm ishizaki
 
7 つの Blazor
7 つの Blazor7 つの Blazor
7 つの Blazorm ishizaki
 
C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版m ishizaki
 
仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話m ishizaki
 
モバイルディスプレイ
モバイルディスプレイモバイルディスプレイ
モバイルディスプレイm ishizaki
 
Windows フォームアプリ 2022
Windows フォームアプリ 2022Windows フォームアプリ 2022
Windows フォームアプリ 2022m ishizaki
 
C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版m ishizaki
 
C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内m ishizaki
 
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能m ishizaki
 
C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版m ishizaki
 
秋葉原 C# もくもく会
秋葉原 C# もくもく会秋葉原 C# もくもく会
秋葉原 C# もくもく会m ishizaki
 

More from m ishizaki (20)

継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
 
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
 
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
 
「スタバ」する話
「スタバ」する話「スタバ」する話
「スタバ」する話
 
エンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについてエンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについて
 
Build 2022 / Uno Platform
Build 2022 / Uno PlatformBuild 2022 / Uno Platform
Build 2022 / Uno Platform
 
7 つの Blazor
7 つの Blazor7 つの Blazor
7 つの Blazor
 
C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版
 
仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話
 
2022 抱負
2022 抱負2022 抱負
2022 抱負
 
モバイルディスプレイ
モバイルディスプレイモバイルディスプレイ
モバイルディスプレイ
 
Windows フォームアプリ 2022
Windows フォームアプリ 2022Windows フォームアプリ 2022
Windows フォームアプリ 2022
 
dotnet tool
dotnet tooldotnet tool
dotnet tool
 
C#10
C#10C#10
C#10
 
C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版
 
C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内
 
C# 9 のおすすめ新機能
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
 
C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版
 
秋葉原 C# もくもく会
秋葉原 C# もくもく会秋葉原 C# もくもく会
秋葉原 C# もくもく会
 

XAML Islands その2