/// <summary> /// Creates a new context menu popup /// </summary> /// <param name="viewModel">view model for the popup</param> public ContextMenuPopupPage(ContextMenuPopupViewModel viewModel) { this.CloseWhenBackgroundIsClicked = true; this.BindingContext = viewModel; this.InitializeComponent(); }
/// <summary> /// Shows the context menu /// </summary> /// <param name="point">map point where the long-tap occurred</param> /// <param name="appSettings">app settings</param> /// <returns>task to wait on</returns> public static async ValueTask <Result> ShowAsync(MapPoint point, AppSettings appSettings) { string latitudeText = GeoDataFormatter.FormatLatLong(point.Latitude, appSettings.CoordinateDisplayFormat); string longitudeText = GeoDataFormatter.FormatLatLong(point.Longitude, appSettings.CoordinateDisplayFormat); string caption = $"Selected point at Latitude: {latitudeText}, Longitude: {longitudeText}, Altitude {point.Altitude.GetValueOrDefault(0.0)} m"; var tcs = new TaskCompletionSource <Result>(); var items = new List <MenuItem> { new MenuItem { Text = "Add new waypoint", IconImageSource = SvgImageCache.GetImageSource("info/images/playlist-plus.svg"), Command = new Command(() => tcs.TrySetResult(Result.AddNewWaypoint)), }, new MenuItem { Text = "Navigate here", IconImageSource = SvgImageCache.GetImageSource("info/images/directions.svg"), Command = new Command(() => tcs.TrySetResult(Result.NavigateHere)), }, new MenuItem { Text = "Show flying range", IconImageSource = SvgImageCache.GetImageSource("info/images/arrow-expand-horizontal.svg"), Command = new Command(() => tcs.TrySetResult(Result.ShowFlyingRange)), }, }; ContextMenuPopupPage popupPage = null; EventHandler backgroundClicked = (sender, args) => tcs.TrySetResult(Result.Cancel); var viewModel = new ContextMenuPopupViewModel( caption, items, () => { popupPage.Navigation.PopPopupAsync(true); popupPage.BackgroundClicked -= backgroundClicked; }); popupPage = new ContextMenuPopupPage(viewModel); popupPage.BackgroundClicked += backgroundClicked; await popupPage.Navigation.PushPopupAsync(popupPage, true); return(await tcs.Task); }
/// <summary> /// Shows context menu /// </summary> /// <returns>task to wait on</returns> private async Task ShowContextMenu() { foreach (var item in this.Items) { item.IsEnabled &= item.Command.CanExecute(item.CommandParameter); } var viewModel = new ContextMenuPopupViewModel( this.Caption, this.Items, () => { this.Navigation.PopPopupAsync(true); }); var popupPage = new ContextMenuPopupPage(viewModel); await popupPage.Navigation.PushPopupAsync(popupPage, true); }
public ShowContextMenuPopupCommand(Workspace workspace, ContextMenuPopupViewModel contextMenuPopup) { _workspace = workspace; _contextMenuPopup = contextMenuPopup; }