Files
FluentTerminal/FluentTerminal.App/Views/MenuExtension.cs
T
Aleksandar Pesic 7ab42ec1de Menu item keyboard accelerators implemented (#589)
* Added icon to "Recent >" menu item.

* Refactored app menu implementation, and implemented keyboard accelerators. Still doesn't work though.

* Few things fixed, but still doesn't work.

* Clicking menu items works.

* Fixing an issue with resources.

* New menu binding implemented. Still doesn't work though.

* Menu displayed properly, except for "Settings".

* Menu works, but it doesn't refresh.

* Works. But needs to be polished.

* All known issues with the new app menu solved.

* Significantly simplifying app menu binding.

* Removing some obsolete classes.

* Menu binding mechanism additionally optimized for performances.

* Removing unused translations.

* Further refactoring app menu binding, in order to make it more general.

* New window mechanism simplified. Terminal-launching code refactored to be more readable. A bug with "SSH Info" fixed.

* Merging the latest changed.
2019-11-26 22:03:22 +01:00

40 lines
1.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using FluentTerminal.App.Converters;
using FluentTerminal.App.ViewModels.Menu;
namespace FluentTerminal.App.Views
{
// https://stackoverflow.com/questions/33839279/bind-obserable-collection-to-menuflyoutsubitem-in-uwp
public static class MenuExtension
{
private static readonly MenuItemViewModelBaseToMenuFlayoutItemBaseConverter Converter =
new MenuItemViewModelBaseToMenuFlayoutItemBaseConverter();
public static IEnumerable<MenuItemViewModelBase> GetSubItems(DependencyObject obj) =>
(IEnumerable<MenuItemViewModelBase>) obj.GetValue(SubItemsProperty);
public static void SetSubItems(DependencyObject obj, IEnumerable<MenuItemViewModelBase> value) =>
obj.SetValue(SubItemsProperty, value);
public static readonly DependencyProperty SubItemsProperty =
DependencyProperty.Register("SubItems", typeof(IEnumerable<MenuItemViewModelBase>), typeof(MenuExtension),
new PropertyMetadata(new List<MenuItemViewModelBase>(), (sender, e) =>
{
if (sender is MenuFlyoutSubItem menuSubItem)
{
menuSubItem.Items?.Clear();
if (e.NewValue is IEnumerable<MenuItemViewModelBase> viewModels)
{
foreach (var item in viewModels.Select(vm => (MenuFlyoutItemBase) Converter.Convert(vm)))
{
menuSubItem.Items?.Add(item);
}
}
}
}));
}
}