Xamarin.Forms でドラッグを実装しよう(のうりん編)
http://www.moonmile.net/blog/archives/7653
Xamarin.Forms でドラッグを実装しよう(Android編)
http://www.moonmile.net/blog/archives/7667
Xamarin.Forms でドラッグを実装しよう(Xamarin.Forms on Android編)
http://www.moonmile.net/blog/archives/7670
Xamarin.Forms でドラッグを実装しよう(Xamarin.Forms on iOS編)
http://www.moonmile.net/blog/archives/7723
の続きです。
最後は Windows Phone で動かします。
もともとの Xamarin.Forms のテンプレートを使っているので、Windows Phone 8.1 版になっていますが、おそらく Windows 10 用の UWP プロジェクトでも動くはずです。
Windows Phone のレンダラーを作る
BoxDragXF.WinPhone プロジェクトに BoxExRenderer クラスを追加します。Windows Phone/Mobile が一番簡単で(簡単なようにしたので)、そのまま ManipulationDelta メソッドを渡せば ok です。渡すときの引数は、疑似的なほうの ManipulationDeltaRoutedEventArgs オブジェクトなので、そこだけコンバートします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [assembly: ExportRenderer( typeof (BoxViewEx), typeof (BoxExRenderer))] namespace BoxDragXF.WinPhone { class BoxExRenderer : Xamarin.Forms.Platform.WinPhone.BoxViewRenderer { protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) { base .OnElementChanged(e); this .ManipulationDelta += BoxExRenderer_ManipulationDelta; } private void BoxExRenderer_ManipulationDelta( object sender, System.Windows.Input.ManipulationDeltaEventArgs e) { var el = this .Element as BoxViewEx; el.OnManipulationDelta(el, new BoxDragXF.ManipulationDeltaRoutedEventArgs(el, e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y)); } } } |
実行してみる
Hyper-V のエミュレーターで動かしてみます。これで、同じ Xamarin.Forms を使って、三機種(Android/iPhone/Windows Phone)で同じようにコントロールをドラッグできることがわかります。