以下の内容はhttps://tech.guitarrapc.com/entry/2018/09/28/034124より取得しました。


XAMLを書くときに使っている拡張機能

UWPアプリを書く必要があり、何度か挫折したXAMLに真剣に取り組んでいます。

今回は、XAMLを書くにあたって自分が導入している拡張機能とめちゃめちゃ便利なアプリの紹介です。

拡張機能

次の2つをいれることで、XAMLに悩まされることが減ったのでお勧めです。 ときにStylerは、いわゆる自動的なフォーマッターでオススメです。 私がこういう拡張をいれる時に共通しているのは、「機械的に自動化されるのに慣れるのは大事」ということで、フォーマッターはその中で優先して導入すると効果があると感じます。

https://marketplace.visualstudio.com/items?itemName=NicoVermeir.XAMLStyler

https://marketplace.visualstudio.com/items?itemName=NikolaMSFT.InlineColorPicker

XamlStyler

XAMLを書いていて面倒だと感じるのが、コントロールの要素が読みにくいことです。 その原因は、自分にとっては「コントロールごとにプロパティの要素が違ったり、並び順が異なる」ことにあります。 しかし、膨大な数のプロパティとコントロールは自分の好みにあうように並び替えたり管理しきれません、やりたくないです。 管理できないものは「保存時に自動フォーマットをかけて、それに慣れる」と考え事が減るので、自動フォーマットする拡張機能としてXamlStylerを導入しました。

この拡張は@nuits_jpさんに教えていただきました、ありがとうございます!

https://Twitter.com/nuits_jp/status/1045307528135864320

Visual Studioの拡張機能で導入でき、ソースもGitHubで公開されています。*1

https://github.com/Xavalon/XamlStyler

拡張をいれると、XAMLを開いて保存(Ctrl + s) するだけで自動的にフォーマットしてくれます。 例えば今までいれてなかったXAMLで適用すると、こんな感じでフォーマットされました。

VS拡張の弱点は各自のVS環境に依存することですが、XamlStylerは外部Configurationで設定できます。 Settings.XamlStylerとしてプロジェクトに配置しておきましょう。 これでVSの設定よりも優先されるので、チームで統一するにはちょうどいい感じです。

次のコミットで、明示的に制御するために追加しました。

https://github.com/guitarrapc/UwpSamples/commit/89332417c530303d8625712cf5a5b2bd00b24235

Script Integrationとしてコンソールアプリもあるので、適当にCIでフォーマットかけることもできます。が、まぁいったんいいでしょう。.NET 4.5.2だし、Linux/macOSで動かないし。

https://github.com/Xavalon/XamlStyler/wiki/Script-Integration

Inline Color Picker

XAML上で色設定時にインラインでカラーピッカーを出してくれるColor Picker拡張です。

UIが古いのですが、VS CodeなどでCSS書いていてよくあるアレなのであって便利です。

XAML 記述の確認

ドキュメント優先、よりも動かして目で見てXAMLを確認する方が圧倒的に手を動かしやすく理解が進みます。

そこで、次の3つのUWPアプリを片隅に表示させて開発しています。

普段からXAML Controls Galleryを開いています。 通常のコントロールの利用方法に悩むことが格段に減ったおすすめアプリです。

このアプリは@okazukiさんに教えていただきました! ありがとうございます。

https://Twitter.com/okazuki/status/1042937751216111616

Windows UI Libraryが2018年8月に発表され、そのnugetライブラリMicrosoft.UI.Xamlを使ったXAML実装サンプルアプリです。 XAMLで表現できるFluent Design向けのコントロールのサンプル実装が目的らしいので、ちょうどほしかったやつという感じです。

Getting Startedが公開されています。

https://github.com/Microsoft/Microsoft-ui-xaml https://docs.microsoft.com/en-us/uwp/toolkits/winui/getting-started

アプリはMicrosoft Storeでインストールできます。

https://www.microsoft.com/en-us/p/xaml-controls-gallery/9msvh128×2zt#activetab=pivot:overviewtab

また、アプリのサンプル実装のソースコードも公開されています。(Microsoft.UI.Xaml使用は、devブランチ参照)

https://github.com/Microsoft/Windows-universal-samples/tree/dev/Samples/XamlUIBasics

アプリは標準コントロールの利用例ですが、ソースコードと一緒にみれるのでかなり助かります。

WindowsCompositionSamples

Windows.UI.Xamlを使った最新のデモとコードの確認ができます。

ソースコードも公開されています。

https://github.com/Microsoft/WindowsCompositionSamples

こちらもMicrosoft Storeでインストールできます。

https://www.microsoft.com/en-us/p/Windows-composition-samples/9n1h8czhbpxb#activetab=pivot:overviewtab

WindowsCommunityToolkit

コミュニティによる、UWPアプリ作成時に使う拡張です。 標準にない便利なコントロールや拡張が多くあります。

ソースコードも公開されています。

https://github.com/Windows-toolkit/WindowsCommunityToolkit

また、MicrosoftからGetting Startedが公開されています。

https://docs.microsoft.com/en-us/Windows/communitytoolkit/getting-started

アプリはMicrosoft SToreでインストールできます。

https://www.microsoft.com/en-us/p/Windows-community-toolkit-sample-app/9nblggh4tlcq?rtc=1#activetab=pivot:overviewtab

微妙に使いにくい感じがするので、もうちょっと触ってみないとばっちりかどうかはわからないです。

まとめ

自分にとってXAMLで一番困る挫折ポイントがコントロールや記述がしっくりこないことだったので、拡張やアプリを使ってまじめに取り込んでいます。 さすがにUnityやXcodeやった後だと以前より苦しみが少ないのですが、XAMLは改めてみても独特というかViewをいかに分離できるかを念頭に組まれている感じが強いです。

そのための仕組みとしてのコードビハインド、正確には双方向バインディングが機能としてあるのはかなり強力ですが、XAML独自の記述がネックに感じます。*2 VMでReactivePropertyを使うと、 MVRPと似たコードの雰囲気になります。 結果、違いとなるXAMLとのバインディングを把握すればいつもと変わらないコードの書き味になるように感じるので、この路線でいくのが性に合ってそうです。

そういえば、ReactivePropertyにこのPRが取り込まれるとAsyncとの相性が抜群によくなるのではよ。とか言ってたらPR作っていただきました、神か。

https://github.com/runceel/ReactiveProperty/pull/86

XAMLは4Kで多きめのモニタで書いていると効率明らかにいいので、なるほどUnityと同じ....という感じです。

*1:ドキュメントもGitHub参照で

*2:仕組みを理解するのが近道なのはどのフレームワークでも同様ですね




以上の内容はhttps://tech.guitarrapc.com/entry/2018/09/28/034124より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14