Files
NotificationFlyout/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutContextMenuXamlHost.cs
T
2021-02-11 00:56:52 +00:00

78 lines
2.1 KiB
C#

using NotificationFlyout.Uwp.UI.Controls;
using NotificationFlyout.Wpf.UI.Extensions;
using NotificationFlyout.Wpf.UI.Helpers;
using System;
using System.Collections.Generic;
using Windows.UI.Xaml.Controls;
namespace NotificationFlyout.Wpf.UI.Controls
{
internal class ContextMenuXamlHost : XamlHostWindow<ContextMenuFlyoutHost>
{
private Uwp.UI.Controls.NotificationFlyout _flyout;
public ContextMenuXamlHost()
{
Topmost = true;
}
public void SetFlyout(Uwp.UI.Controls.NotificationFlyout flyout)
{
if (_flyout != null)
{
_flyout.MenuItemsChanged -= OnContextMenuItemsChanged;
}
_flyout = flyout;
UpdateMenuItems();
}
public void ShowContextMenuFlyout()
{
var position = CursorHelper.GetPhysicalCursorPos();
this.SetWindowPosition(position.y, position.x, WindowSize, WindowSize);
var flyoutHost = GetHostContent();
if (flyoutHost != null)
{
flyoutHost.ShowFlyout();
}
Activate();
}
protected override void OnContentLoaded()
{
UpdateMenuItems();
}
protected override void OnDeactivated(EventArgs args)
{
var flyoutHost = GetHostContent();
if (flyoutHost != null)
{
flyoutHost.HideFlyout();
}
}
private void OnContextMenuItemsChanged(object sender, NotificationFlyoutMenuItemsChangedEventArgs args)
{
UpdateMenuItems(args.AddedItems, args.RemovedItems);
}
private void UpdateMenuItems()
{
if (_flyout == null) return;
UpdateMenuItems(_flyout.ContextMenuItems);
}
private void UpdateMenuItems(IList<MenuFlyoutItemBase> addedItems, IList<MenuFlyoutItemBase> removedItems = default)
{
var flyoutHost = GetHostContent();
if (flyoutHost != null)
{
flyoutHost.SetMenuItems(addedItems, removedItems);
}
}
}
}