コード例 #1
0
        /// <summary>
        /// Creates a button that when clicked displays a flyout with the specified <paramref name="links"/>.
        /// Clicking on a link opens a web browser on that page.
        /// </summary>
        /// <param name="links"></param>
        /// <returns></returns>
        internal static Windows.UI.Xaml.Controls.Button CreateLinksAppBarButton(Dictionary <string, Uri> links)
        {
            var popup = new Windows.UI.Popups.PopupMenu();

            Windows.UI.Popups.UICommandInvokedHandler popupHandler = async(Windows.UI.Popups.IUICommand command) =>
            {
                await Windows.System.Launcher.LaunchUriAsync(links[command.Label]);
            };

            foreach (var item in links)
            {
                popup.Commands.Add(new Windows.UI.Popups.UICommand(item.Key, popupHandler));
            }

            var button = new Windows.UI.Xaml.Controls.Button
            {
                Style = App.Current.Resources["LinksAppBarButtonStyle"] as Windows.UI.Xaml.Style
            };

            button.Click += async(object sender, Windows.UI.Xaml.RoutedEventArgs e) =>
            {
                var btnSender = sender as Windows.UI.Xaml.Controls.Button;
                var transform = btnSender.TransformToVisual(Windows.UI.Xaml.Window.Current.Content) as Windows.UI.Xaml.Media.MatrixTransform;
                var point     = transform.TransformPoint(new Windows.Foundation.Point());

                await popup.ShowAsync(point);
            };

            return(button);
        }
コード例 #2
0
ファイル: PopupMenu.cs プロジェクト: baskren/Pontoon
        /// <summary>
        /// Shows the context menu at the specified client coordinates.
        /// </summary>
        /// <param name="invocationPoint">The coordinates (in DIPs), relative to the window, of the user's finger or mouse pointer when the oncontextmenu event fired.
        /// The menu is placed above and centered on this point.</param>
        /// <returns>An object that represents the asynchronous operation.
        /// For more on the async pattern, see Asynchronous programming in the Windows Runtime.</returns>
        public Task <IUICommand> ShowAsync(Point invocationPoint)
        {
#if WINDOWS_UWP
            return(Task.Run <IUICommand>(async() =>
            {
                foreach (IUICommand command in Commands)
                {
                    _menu.Commands.Add(new Windows.UI.Popups.UICommand(command.Label, new Windows.UI.Popups.UICommandInvokedHandler((c2) => { command.Invoked?.Invoke(command); }), command.Id));
                }
                Windows.Foundation.Point p = new Windows.Foundation.Point(invocationPoint.X, invocationPoint.Y);
                var c = await _menu.ShowAsync(p);
                return c == null ? null : new UICommand(c.Label, new UICommandInvokedHandler((c2) => { c2.Invoked?.Invoke(c2); }), c.Id);
            }));
#else
            return(ShowForSelectionAsync(new Rect(invocationPoint.X, invocationPoint.Y, 0, 0), Placement.Default));
#endif
        }
コード例 #3
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));
        }
コード例 #4
0
 private void chartOptions(object sender, RoutedEventArgs e)
 {
     var popup = new Windows.UI.Popups.PopupMenu();
     popup.ShowAsync(new Point(0, 0));
 }