Browse Source

Fixes ContextMenus when Designer is used inside of SD!

pull/604/head
jkuehner 12 years ago
parent
commit
535b4df471
  1. 16
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs
  2. 29
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs

16
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs

@ -26,6 +26,7 @@ using System.Reflection; @@ -26,6 +26,7 @@ using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Markup;
using System.Xml;
@ -127,7 +128,20 @@ namespace ICSharpCode.WpfDesign.AddIn @@ -127,7 +128,20 @@ namespace ICSharpCode.WpfDesign.AddIn
settings.ReportErrors = UpdateTasks;
designer.LoadDesigner(r, settings);
designer.ContextMenuOpening += (sender, e) => MenuService.ShowContextMenu(e.OriginalSource as UIElement, designer, "/AddIns/WpfDesign/Designer/ContextMenu");
designer.DesignPanel.ContextMenuHandler = (contextMenu) => {
var newContextmenu = new ContextMenu();
var sdContextMenuItems = MenuService.CreateMenuItems(newContextmenu, designer, "/AddIns/WpfDesign/Designer/ContextMenu", "ContextMenu");
foreach(var entry in sdContextMenuItems)
newContextmenu.Items.Add(entry);
newContextmenu.Items.Add(new Separator());
var items = contextMenu.Items.Cast<Object>().ToList();
contextMenu.Items.Clear();
foreach(var entry in items)
newContextmenu.Items.Add(entry);
designer.DesignPanel.ContextMenu = newContextmenu;
};
if (outline != null && designer.DesignContext != null && designer.DesignContext.RootItem != null) {
outline.Root = OutlineNode.Create(designer.DesignContext.RootItem);

29
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs

@ -32,6 +32,7 @@ using System.Windows.Threading; @@ -32,6 +32,7 @@ using System.Windows.Threading;
using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Designer.Controls;
using ICSharpCode.WpfDesign.Designer.UIExtensions;
using ICSharpCode.WpfDesign.Designer.Xaml;
namespace ICSharpCode.WpfDesign.Designer
@ -461,6 +462,8 @@ namespace ICSharpCode.WpfDesign.Designer @@ -461,6 +462,8 @@ namespace ICSharpCode.WpfDesign.Designer
private Dictionary<ContextMenu, Tuple<int,List<object>>> contextMenusAndEntries = new Dictionary<ContextMenu, Tuple<int,List<object>>>();
public Action<ContextMenu> ContextMenuHandler { get; set; }
public void AddContextMenu(ContextMenu contextMenu)
{
contextMenusAndEntries.Add(contextMenu, new Tuple<int, List<object>>(contextMenusAndEntries.Count, new List<object>(contextMenu.Items.Cast<object>())));
@ -484,24 +487,32 @@ namespace ICSharpCode.WpfDesign.Designer @@ -484,24 +487,32 @@ namespace ICSharpCode.WpfDesign.Designer
private void UpdateContextMenu()
{
if (contextMenusAndEntries.Count == 0)
if (this.ContextMenu != null)
{
this.ContextMenu.Items.Clear();
this.ContextMenu = null;
if (this.ContextMenu == null)
this.ContextMenu = new ContextMenu();
}
var contextMenu = new ContextMenu();
this.ContextMenu.Items.Clear();
foreach (var entries in contextMenusAndEntries.Values.OrderBy(x => x.Item1).Select(x => x.Item2))
{
if (this.ContextMenu.Items.Count > 0)
this.ContextMenu.Items.Add(new Separator());
if (contextMenu.Items.Count > 0)
contextMenu.Items.Add(new Separator());
foreach (var entry in entries)
{
ContextMenu.Items.Add(entry);
var ctl = ((FrameworkElement)entry).TryFindParent<ItemsControl>();
if (ctl != null)
ctl.Items.Remove(entry);
contextMenu.Items.Add(entry);
}
}
if (ContextMenuHandler != null)
ContextMenuHandler(contextMenu);
else
this.ContextMenu = contextMenu;
}
#endregion

Loading…
Cancel
Save