public static IDisposable AddMenuTemporarily(FrameworkElement element, Optional <Menu> menu, IScheduler dispatcher)
        {
            if (!menu.HasValue)
            {
                element.ContextMenu = null;
                return(Disposable.Empty);
            }

            element.ContextMenu = new System.Windows.Controls.ContextMenu();

            var dispose = Disposable.Empty;

            element.ContextMenu.IsVisibleChanged += (sender, e) =>
            {
                if ((bool)e.NewValue)
                {
                    dispose.Dispose();
                    element.ContextMenu.Items.Clear();
                    dispose = WindowsMenuBuilder.PopulateContextMenu(menu.Value, element.ContextMenu, null, dispatcher);
                }
                else
                {
                    dispose.Dispose();
                    element.ContextMenu.Items.Clear();
                    dispose = Disposable.Empty;
                }
            };

            return(Disposable.Create(() => dispose.Dispose()));
        }