public static async Task GenerateSubMenuItemsAsync(IList <MenuFlyoutItemBase> Items, ContextMenuItem[] SubMenus, RoutedEventHandler ClickHandler) { foreach (ContextMenuItem SubItem in SubMenus) { if (SubItem.SubMenus.Length > 0) { MenuFlyoutSubItem Item = new MenuFlyoutSubItem { Text = SubItem.Name, Tag = SubItem, MinWidth = 150, MaxWidth = 350, Icon = new FontIcon { FontFamily = new Windows.UI.Xaml.Media.FontFamily("Segoe MDL2 Assets"), Glyph = "\uE2AC" } }; await GenerateSubMenuItemsAsync(Item.Items, SubItem.SubMenus, ClickHandler); Items.Add(Item); } else { MenuFlyoutItemWithImage FlyoutItem = new MenuFlyoutItemWithImage { Text = SubItem.Name, Tag = SubItem, MinWidth = 150, MaxWidth = 350 }; if (SubItem.IconData.Length != 0) { using (MemoryStream Stream = new MemoryStream(SubItem.IconData)) { BitmapImage Bitmap = new BitmapImage(); await Bitmap.SetSourceAsync(Stream.AsRandomAccessStream()); FlyoutItem.ImageIcon = Bitmap; } } else { FlyoutItem.Icon = new FontIcon { FontFamily = new Windows.UI.Xaml.Media.FontFamily("Segoe MDL2 Assets"), Glyph = "\uE2AC" }; } FlyoutItem.Click += ClickHandler; Items.Add(FlyoutItem); } } }
public void RightClickContextMenu_Opening(object sender, object e) { ClearSelection(); var shiftPressed = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down); SetShellContextmenu(BaseLayoutContextFlyout, shiftPressed, false); var newItemMenu = (MenuFlyoutSubItem)BaseLayoutContextFlyout.Items.SingleOrDefault(x => x.Name == "NewEmptySpace"); if (newItemMenu == null || cachedNewContextMenuEntries == null) { return; } if (!newItemMenu.Items.Any(x => (x.Tag as string) == "CreateNewFile")) { var separatorIndex = newItemMenu.Items.IndexOf(newItemMenu.Items.Single(x => x.Name == "NewMenuFileFolderSeparator")); foreach (var newEntry in Enumerable.Reverse(cachedNewContextMenuEntries)) { MenuFlyoutItem menuLayoutItem; if (newEntry.Icon != null) { var image = new BitmapImage(); #pragma warning disable CS4014 image.SetSourceAsync(newEntry.Icon); #pragma warning restore CS4014 menuLayoutItem = new MenuFlyoutItemWithImage() { Text = newEntry.Name, BitmapIcon = image, Tag = "CreateNewFile" }; } else { menuLayoutItem = new MenuFlyoutItem() { Text = newEntry.Name, Icon = new FontIcon() { FontFamily = App.Current.Resources["FluentUIGlyphs"] as Windows.UI.Xaml.Media.FontFamily, Glyph = "\xea00" }, Tag = "CreateNewFile" }; } menuLayoutItem.Command = ParentShellPageInstance.InteractionOperations.CreateNewFile; menuLayoutItem.CommandParameter = newEntry; newItemMenu.Items.Insert(separatorIndex + 1, menuLayoutItem); } } }
public void RightClickContextMenu_Opening(object sender, object e) { ClearSelection(); var shiftPressed = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down); SetShellContextmenu(BaseLayoutContextFlyout, shiftPressed, false); var newItemMenu = (MenuFlyoutSubItem)BaseLayoutContextFlyout.Items.SingleOrDefault(x => x.Name == "NewEmptySpace"); if (newItemMenu == null || cachedNewContextMenuEntries == null) { return; } if (!newItemMenu.Items.Any(x => (x.Tag as string) == "CreateNewFile")) { var separatorIndex = newItemMenu.Items.IndexOf(newItemMenu.Items.Single(x => x.Name == "NewMenuFileFolderSeparator")); foreach (var newEntry in Enumerable.Reverse(cachedNewContextMenuEntries)) { MenuFlyoutItem menuLayoutItem; if (newEntry.Icon != null) { var image = new BitmapImage(); #pragma warning disable CS4014 image.SetSourceAsync(newEntry.Icon); #pragma warning restore CS4014 menuLayoutItem = new MenuFlyoutItemWithImage() { Text = newEntry.Name, BitmapIcon = image, Tag = "CreateNewFile" }; } else { menuLayoutItem = new MenuFlyoutItem() { Text = newEntry.Name, Icon = new FontIcon() { Glyph = "\xE7C3" }, Tag = "CreateNewFile" }; } menuLayoutItem.Command = ParentShellPageInstance.InteractionOperations.CreateNewFile; menuLayoutItem.CommandParameter = newEntry; newItemMenu.Items.Insert(separatorIndex + 1, menuLayoutItem); } } var isPinned = App.SidebarPinnedController.Model.FavoriteItems.Contains( ParentShellPageInstance.FilesystemViewModel.WorkingDirectory); if (isPinned) { LoadMenuFlyoutItemByName("UnpinDirectoryFromSidebar"); UnloadMenuFlyoutItemByName("PinDirectoryToSidebar"); } else { LoadMenuFlyoutItemByName("PinDirectoryToSidebar"); UnloadMenuFlyoutItemByName("UnpinDirectoryFromSidebar"); } }