放浪軍師のアプリ開発局

Xamarin.Formsを使ってAndroid,iOS,UWP,WPFで動くアプリを開発したりしています。

Xamarin.Forms.WPF の ListView コントロールの挙動について

放浪軍師の Xamarin.Forms によるアプリ開発
今回は Xamarin.Forms.WPF の ListView コントロールの挙動についてになります。

なんか Xamarin.Forms.WPF の ListView がおかしい

前回から紹介しているように、現在 Windows7 でも動かしたいという要望のもと、乱ちゃんProject の WPF 化を進めております。その際、どうも ListView の挙動が他と違うという事がわかり、現在発覚した範囲で紹介したいと思います。まぁ Xamarin.Forms.WPF は歴史も浅いですし、これから修正されていくのかもしれませんので今のところはこんなだねって事で参考になればと思います。

環境

Visual Studio 2017 Community
Xamarin.Forms 3.4.0.1009999
Xamarin.Forms.Platform.WPF 3.4.0.1009999

ImageCell でフリーズ

ImageCell に画像を指定すると何故かフリーズします。単純に Image コントロールを使った場合はフリーズしたりしないので、 ImageView そのものが原因だと思います。ちなみに乱ちゃんではこの ImageCell をメニュー画面に使っていたため ViewCell に Image を配置する事で対応しました。この場合はフリーズしません。

ViewCell に設置した Button の幅の取り方が違う

Twitter にも投稿しましたが、こんな感じで ViewCell に Button を配置したら WPF では ViewCell 内で広がらずに幅の狭い Button になってしまいました。
(※左画面:WPF 右画面:UWP)

この後、spacekey @dlspacekey さんや 田淵 義人@エクセルソフト @ytabuchi さんとやり取りさせていただいたのですが、やはり WPF だけ挙動が違うようだという結論に。具体的に説明すればこんな感じになります。

UWP の場合

f:id:roamschemer:20190202224340g:plain
こんな感じになります。ウィンドウ幅いっぱいに広がって、幅を変更したら追従します。こうなって欲しいんです。

WPF で ListView のみを配置して ViewCell に Button を配置した場合

このように Button が狭いという事はないけれどウィンドウの幅を変更した際に追従しません。
f:id:roamschemer:20190202224539g:plain

WPF でレイアウトコントロール内に ListView を配置して ViewCell に Button を配置した場合

StackLayout や Grid 等のレイアウトコントロール内に配置した場合は、文字幅に合わせて縮んでしまいます。ウィンドウの幅には追従します。
f:id:roamschemer:20190202224640g:plain
尚、図の一番下に配置してある Button は ListView 外に配置しているんですが、こっちはちゃんと広がりますね。何故じゃ…
これに関しては今のところ回避策は見つからず頭を抱えております。誰かご存知の方がいたら情報をお待ちしております…

ListView.Header ListView.Footer

WPF では悲しい事に一切表示されません…。仕方ないので ListView 外に Label で再現しようかなぁとか考えています。

まとめ

とりあえず今のところはこのぐらいです。もっと使っていれば色々と発見があるかもしれませんね。
Xamarin.Forms.WPF の情報が全く落ちてないのが辛い所ですが、まぁ落ちてないなら発信するチャンス!!!との気持ちで頑張ろうと思います。