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. 27
      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;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Markup; using System.Windows.Markup;
using System.Xml; using System.Xml;
@ -127,7 +128,20 @@ namespace ICSharpCode.WpfDesign.AddIn
settings.ReportErrors = UpdateTasks; settings.ReportErrors = UpdateTasks;
designer.LoadDesigner(r, settings); 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) { if (outline != null && designer.DesignContext != null && designer.DesignContext.RootItem != null) {
outline.Root = OutlineNode.Create(designer.DesignContext.RootItem); outline.Root = OutlineNode.Create(designer.DesignContext.RootItem);

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

@ -32,6 +32,7 @@ using System.Windows.Threading;
using ICSharpCode.WpfDesign.Adorners; using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Designer.Controls; using ICSharpCode.WpfDesign.Designer.Controls;
using ICSharpCode.WpfDesign.Designer.UIExtensions;
using ICSharpCode.WpfDesign.Designer.Xaml; using ICSharpCode.WpfDesign.Designer.Xaml;
namespace ICSharpCode.WpfDesign.Designer 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>>>(); 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) public void AddContextMenu(ContextMenu contextMenu)
{ {
contextMenusAndEntries.Add(contextMenu, new Tuple<int, List<object>>(contextMenusAndEntries.Count, new List<object>(contextMenu.Items.Cast<object>()))); 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
private void UpdateContextMenu() private void UpdateContextMenu()
{ {
if (contextMenusAndEntries.Count == 0) if (this.ContextMenu != null)
{
this.ContextMenu.Items.Clear();
this.ContextMenu = null; this.ContextMenu = null;
}
if (this.ContextMenu == null) var contextMenu = new ContextMenu();
this.ContextMenu = new ContextMenu();
this.ContextMenu.Items.Clear();
foreach (var entries in contextMenusAndEntries.Values.OrderBy(x => x.Item1).Select(x => x.Item2)) foreach (var entries in contextMenusAndEntries.Values.OrderBy(x => x.Item1).Select(x => x.Item2))
{ {
if (this.ContextMenu.Items.Count > 0) if (contextMenu.Items.Count > 0)
this.ContextMenu.Items.Add(new Separator()); contextMenu.Items.Add(new Separator());
foreach (var entry in entries) 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 #endregion

Loading…
Cancel
Save