void LayoutMenu() { if (!CheckPageAndMenu()) { return; } var menu = _basePage.SlideMenu; _dragGesture = DragGestureFactory.GetGestureByView(menu); _dragGesture.RequestLayout = (l, t, r, b, density) => { menu.Layout(new Xamarin.Forms.Rectangle( l, t, (r - l), (b - t))); Canvas.SetLeft(_popMenuOverlayRenderer, l); Canvas.SetTop(_popMenuOverlayRenderer, t); Canvas.SetZIndex(_popMenuOverlayRenderer, 254); _popMenuOverlayRenderer.UpdateLayout(); _mainCanvas.UpdateLayout(); }; _dragGesture.NeedShowBackgroundView = (open, alpha) => { if (open) { ShowBackgroundOverlay(alpha); } else { HideBackgroundOverlay(); } }; _basePage.HideMenuAction = () => { if (_dragGesture == null) { return; } _dragGesture.LayoutHideStatus(); // DoubleAnimation wasn't supported by UWP? //DoubleAnimation dal = new DoubleAnimation(); //dal.From = Canvas.GetLeft(_popMenuOverlayRenderer); //dal.To = rectp.left; //dal.Duration = new Duration(TimeSpan.FromMilliseconds(menu.AnimationDurationMillisecond)); //DoubleAnimation dat = new DoubleAnimation(); //dat.From = Canvas.GetTop(_popMenuOverlayRenderer); //dat.To = rectp.top; //dat.Duration = new Duration(TimeSpan.FromMilliseconds(menu.AnimationDurationMillisecond)); //(_popMenuOverlayRenderer as UIElement).BeginAnimation(Canvas.LeftProperty, dal); }; _basePage.ShowMenuAction = () => { if (_dragGesture == null) { return; } _dragGesture.LayoutShowStatus(); }; if (_popMenuOverlayRenderer == null) { _popMenuOverlayRenderer = Platform.CreateRenderer(menu) as LayoutRenderer; _popMenuOverlayRenderer.PointerPressed += menuOverlayRenderer_PointerPressed; _popMenuOverlayRenderer.PointerMoved += menuOverlayRenderer_PointerMoved; _popMenuOverlayRenderer.PointerReleased += menuOverlayRenderer_PointerReleased; _popMenuOverlayRenderer.PointerExited += menuOverlayRenderer_PointerReleased; } var rect = _dragGesture.GetHidePosition(); menu.Layout(new Xamarin.Forms.Rectangle( rect.left, rect.top, (rect.right - rect.left), (rect.bottom - rect.top))); Canvas.SetLeft(_popMenuOverlayRenderer, rect.left); Canvas.SetTop(_popMenuOverlayRenderer, rect.top); _popMenuOverlayRenderer.Visibility = menu.IsVisible ? Visibility.Visible : Visibility.Collapsed; _popMenuOverlayRenderer.UpdateLayout(); }