/// <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); }
/// <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 }
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)); }
private void chartOptions(object sender, RoutedEventArgs e) { var popup = new Windows.UI.Popups.PopupMenu(); popup.ShowAsync(new Point(0, 0)); }