Xamarin.Forms (iOS, UWP) で作ってみた

普通に面白いです。

Xamarin.Forms、WPFと比べるとXAMLがシンプルというか機能限定というか原始的というか。昔のHTMLのタグを直打ちしていた2000年代前半の頃を思い出す。しかし、そもそもチェックボックスやらトグルボタンからして無い(一応、BindablePropertyで多少はカスタムコントロール作ったり、ネイティブ呼び出したりとかは出来るようですが)。

なにより、WPFと違って、XAMLのRelativeSourceとか無いしContentTemplate でバリバリXAMLでコントロールをいじれないから、基本(ネイティブ呼び出しとかしない限り)カスタムデザインは無理と思った方がいいかも。Triggers もないVisual State ManagerもないOrz、あああ~と。UIに関してはWPFが恋しくなる感じという感じ。

まぁ、コントロールに関してはクロスプラットフォームで、ネイティブのコントロールにマッピングされる訳だから最小共通項になるのは当然ですよね。。。

因みにWPFでMVVMで作った元のC#のコードは、ViewModelとModel部分で言うと、95%ぐらい流用できそう。プラットフォーム依存の設定情報の保存に関しては作り直しだなぁ。あと、デバイス固有のレイアウトは新規に追加しなきゃだめだ。回転とかあるし。

因みに、androidは持ってないし、興味もないのでandroid用アプリについては分からない。

しかし、結構細かなバグはある。アハハハハ。orz

初日でぶち当たった Xamarin.Forms のバグ。

Xamarin NavigationPage.SetHasNavigationBar false doesn’t work
https://github.com/xamarin/Xamarin.Forms/issues/1437
https://github.com/xamarin/Xamarin.Forms/issues/1627

Xamarin ListView.ScrollTo doesn’t animate on UWP #2048
https://github.com/xamarin/Xamarin.Forms/issues/2048

二日目で、

Slider crashes when Minimum value greater than zero and set before Max value in XAML #1943
https://github.com/xamarin/Xamarin.Forms/issues/1943

堪んないね(面白いの意味で)。

他にも、

SliderのMaximumにバインディング経由で0を代入

Maximum="{Binding Path=ZeroValue}"

すると、アプリ自体が落ちたり。。

TCPClient.ReceiveTimeout = System.Threading.Timeout.Infinite

するとやっぱり落ちたり。。。(Xamarin.Forms 2.5.0.280555時点)

一応、iPhoneとUWPで動くもの出来てるんだけどなぁ。。。現状UWPは、iOSアプリを作るためのテスト用。Macと接続してシミュレーター起動するのが面倒だから、まずUWPで動作確認して、見た目と細かな挙動を最終的にiOSシミュレーターで確認する、みたいな。

どうしてもUWPの挙動が好きになれない。やっぱりデスクトップ版はWPFだなぁ。

追記:WPFと微妙に挙動が違うのがすんごい大変。同じコードなのに、データバインディングの挙動が違う。スレッドの挙動も違う。微妙に振る舞いが違うってのは、バグの元。

The devil is in the details

 

ただ、新しい実装なだけあって、厳密な所があって隠れたバグが見つかったりして、利点もある。

Leave a Reply