private void Menu_Opening(object sender, object e) { CommandBarFlyout myFlyout = sender as CommandBarFlyout; if (myFlyout != null && myFlyout.Target == REBCustom) { AppBarButton myButton = new AppBarButton { Command = new StandardUICommand(StandardUICommandKind.Share) }; myFlyout.PrimaryCommands.Add(myButton); } else { muxc.CommandBarFlyout muxFlyout = sender as muxc.CommandBarFlyout; if (muxFlyout != null && muxFlyout.Target == REBCustom) { AppBarButton myButton = new AppBarButton { Command = new StandardUICommand(StandardUICommandKind.Share) }; muxFlyout.PrimaryCommands.Add(myButton); } } }
public static async Task SetCommandBarFlyoutWithExtraContextMenuItems(this ListViewBase ListControl, CommandBarFlyout Flyout, Point ShowAt) { if (Flyout == null) { throw new ArgumentNullException(nameof(Flyout), "Argument could not be null"); } if (Interlocked.Exchange(ref ContextMenuLockResource, 1) == 0) { try { if (ApplicationData.Current.LocalSettings.Values["ContextMenuExtSwitch"] is bool IsExt && !IsExt) { foreach (AppBarButton ExtraButton in Flyout.SecondaryCommands.OfType <AppBarButton>().Where((Btn) => Btn.Name == "ExtraButton").ToArray()) { Flyout.SecondaryCommands.Remove(ExtraButton); } foreach (AppBarSeparator Separator in Flyout.SecondaryCommands.OfType <AppBarSeparator>().Where((Sep) => Sep.Name == "CustomSep").ToArray()) { Flyout.SecondaryCommands.Remove(Separator); } } else { string[] SelectedPathArray = null; if (ListControl.SelectedItems.Count <= 1) { if (ListControl.SelectedItem is FileSystemStorageItemBase Selected) { SelectedPathArray = new string[] { Selected.Path }; } else if (ListControl.FindParentOfType <FileControl>() is FileControl Control && !string.IsNullOrEmpty(Control.CurrentPresenter.CurrentFolder?.Path)) { SelectedPathArray = new string[] { Control.CurrentPresenter.CurrentFolder.Path }; } } else { SelectedPathArray = ListControl.SelectedItems.OfType <FileSystemStorageItemBase>().Select((Item) => Item.Path).ToArray(); } if (SelectedPathArray != null) { using (FullTrustProcessController.ExclusiveUsage Exclusive = await FullTrustProcessController.GetAvailableController()) { IReadOnlyList <ContextMenuItem> ExtraMenuItems = await Exclusive.Controller.GetContextMenuItemsAsync(SelectedPathArray, Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down)); foreach (AppBarButton ExtraButton in Flyout.SecondaryCommands.OfType <AppBarButton>().Where((Btn) => Btn.Name == "ExtraButton").ToArray()) { Flyout.SecondaryCommands.Remove(ExtraButton); } foreach (AppBarSeparator Separator in Flyout.SecondaryCommands.OfType <AppBarSeparator>().Where((Sep) => Sep.Name == "CustomSep").ToArray()) { Flyout.SecondaryCommands.Remove(Separator); } if (ExtraMenuItems.Count > 0) { async void ClickHandler(object sender, RoutedEventArgs args) { if (sender is FrameworkElement Btn && Btn.Tag is ContextMenuItem MenuItem) { Flyout.Hide(); if (!await MenuItem.InvokeAsync()) { QueueContentDialog Dialog = new QueueContentDialog { Title = Globalization.GetString("Common_Dialog_ErrorTitle"), Content = Globalization.GetString("QueueDialog_InvokeContextMenuError_Content"), CloseButtonText = Globalization.GetString("Common_Dialog_CloseButton") }; await Dialog.ShowAsync(); } } } short ShowExtNum = Convert.ToInt16(Math.Max(9 - Flyout.SecondaryCommands.Count((Item) => Item is AppBarButton), 0)); int Index = Flyout.SecondaryCommands.IndexOf(Flyout.SecondaryCommands.OfType <AppBarSeparator>().FirstOrDefault()) + 1; if (ExtraMenuItems.Count > ShowExtNum + 1) { Flyout.SecondaryCommands.Insert(Index, new AppBarSeparator { Name = "CustomSep" }); foreach (ContextMenuItem AddItem in ExtraMenuItems.Take(ShowExtNum)) { Flyout.SecondaryCommands.Insert(Index, await AddItem.GenerateUIButtonAsync(ClickHandler)); } AppBarButton MoreItem = new AppBarButton { Label = Globalization.GetString("CommandBarFlyout_More_Item"), Icon = new SymbolIcon(Symbol.More), Name = "ExtraButton", MinWidth = 250 }; MenuFlyout MoreFlyout = new MenuFlyout(); await ContextMenuItem.GenerateSubMenuItemsAsync(MoreFlyout.Items, ExtraMenuItems.Skip(ShowExtNum).ToArray(), ClickHandler); MoreItem.Flyout = MoreFlyout; Flyout.SecondaryCommands.Insert(Index + ShowExtNum, MoreItem); } else { foreach (ContextMenuItem AddItem in ExtraMenuItems) { Flyout.SecondaryCommands.Insert(Index, await AddItem.GenerateUIButtonAsync(ClickHandler)); } Flyout.SecondaryCommands.Insert(Index + ExtraMenuItems.Count, new AppBarSeparator { Name = "CustomSep" }); } } } } } }