Exemple #1
0
        public static UIView ConvertFormsToNative(this Xamarin.Forms.View view)
        {
            var renderer = view.GetOrCreateRenderer();
            var size     = new CGRect(view.X, view.Y, view.Width, view.Height);

            renderer.NativeView.Frame            = size;
            renderer.NativeView.AutoresizingMask = UIViewAutoresizing.All;
            renderer.NativeView.ContentMode      = UIViewContentMode.ScaleToFill;
            renderer.Element.Layout(size.ToRectangle());
            var nativeView = renderer.NativeView;

            nativeView.SetNeedsLayout();
            return(nativeView);
        }
Exemple #2
0
        public async Task <int> LaunchMenu(List <string> menuItems, Xamarin.Forms.View parent)
        {
            if (menuItems == null || menuItems.Count == 0)
            {
                return(-1);
            }

            var menu = new Windows.UI.Popups.PopupMenu();

            Windows.Foundation.Point point = new Windows.Foundation.Point(0, 0);

            if (parent != null)
            {
                // have to turn it into the UWP visual control and extract the screen coordinates
                var visualElement = parent.GetOrCreateRenderer()?.ContainerElement;
                if (visualElement != null)
                {
                    GeneralTransform transform = visualElement.TransformToVisual(null);
                    point = transform.TransformPoint(new Windows.Foundation.Point());
                }
            }

            for (var i = 0; i < menuItems.Count; i++)
            {
                var item = menuItems[i];
                menu.Commands.Add(new Windows.UI.Popups.UICommand(item));
            }

            var response = await menu.ShowAsync(point);

            if (response == null || string.IsNullOrEmpty(response.Label))
            {
                return(-1);
            }

            return(menuItems.IndexOf(response.Label));
        }
Exemple #3
0
        public void ShowContentPopup(Xamarin.Forms.View content, int width, int height, Xamarin.Forms.View parent)
        {
            CancelPopup();

            _popup = new Popup();
            _popup.IsLightDismissEnabled = true;

            if (parent != null)
            {
                // have to turn it into the UWP visual control and extract the screen coordinates
                var parentElement = parent.GetOrCreateRenderer()?.ContainerElement;
                if (parentElement != null)
                {
                    GeneralTransform         transform = parentElement.TransformToVisual(null);
                    Windows.Foundation.Point point     = transform.TransformPoint(new Windows.Foundation.Point());
                    _popup.HorizontalOffset = point.X;
                    _popup.VerticalOffset   = point.Y;
                }
            }

            var border = new Border
            {
                HorizontalAlignment = HorizontalAlignment.Stretch,
                VerticalAlignment   = VerticalAlignment.Stretch,
                BorderBrush         = new SolidColorBrush(Colors.Black),
                BorderThickness     = new Windows.UI.Xaml.Thickness(1)
            };

            Grid.SetColumnSpan(border, 3);
            Grid.SetRowSpan(border, 3);

            var visualElement = content.GetOrCreateRenderer().ContainerElement;

            Grid.SetColumn(visualElement, 1);
            Grid.SetRow(visualElement, 1);

            float spacing = 8f;

            var grid = new Windows.UI.Xaml.Controls.Grid
            {
                HorizontalAlignment = HorizontalAlignment.Stretch,
                VerticalAlignment   = VerticalAlignment.Stretch,
                Background          = new SolidColorBrush(Colors.White),
                RowSpacing          = 4,
                RowDefinitions      =
                {
                    new Windows.UI.Xaml.Controls.RowDefinition {
                        Height = new Windows.UI.Xaml.GridLength(spacing)
                    },
                    new Windows.UI.Xaml.Controls.RowDefinition {
                        Height = new Windows.UI.Xaml.GridLength(height)
                    },
                    new Windows.UI.Xaml.Controls.RowDefinition {
                        Height = new Windows.UI.Xaml.GridLength(spacing)
                    },
                },
                ColumnDefinitions =
                {
                    new Windows.UI.Xaml.Controls.ColumnDefinition {
                        Width = new Windows.UI.Xaml.GridLength(spacing)
                    },
                    new Windows.UI.Xaml.Controls.ColumnDefinition {
                        Width = new Windows.UI.Xaml.GridLength(width)
                    },
                    new Windows.UI.Xaml.Controls.ColumnDefinition {
                        Width = new Windows.UI.Xaml.GridLength(spacing)
                    },
                },
                Children =
                {
                    border,
                    visualElement
                }
            };

            grid.SizeChanged += delegate
            {
                // this is done in case the popup window show's outside the bounds of the main window

                var window = ApplicationView.GetForCurrentView();

                if (_popup.HorizontalOffset + grid.ActualWidth > window.VisibleBounds.Width)
                {
                    _popup.HorizontalOffset = window.VisibleBounds.Width - grid.ActualWidth - 10;
                }
            };

            _popup.Child  = grid;
            _popup.IsOpen = true;
        }