protected override void OnOpened(RoutedEventArgs e)
{
InheritingContextMenu previous = null;
if (_previouslyOpened?.TryGetTarget(out previous) == true)
{
previous.RemoveTemporary();
}
RemoveTemporary();
ContextMenuAdvancement.CheckTime();
_menus = ContextMenuAdvancement.ParentContextMenu;
if (_menus.Count == 0)
{
return;
}
_menus = _menus.Where(x => !ReferenceEquals(x.Item1, this)).ToList();
ContextMenuAdvancement.ParentContextMenu.Clear();
_items = new List <List <FrameworkElement> >(_menus.Count);
foreach (var menu in _menus)
{
var sub = menu.Item1.Items.OfType <FrameworkElement>().ToList();
foreach (var s in sub.OfType <MenuItem>())
{
s.DataContext = menu.Item2;
}
_items.Add(sub);
menu.Item1.Items.Clear();
}
if (OptionInsertInFront)
{
var i = 0;
foreach (var group in _items)
{
var any = false;
foreach (var item in group)
{
Items.Insert(i++, item);
item.Tag = TemporaryMark;
any = true;
}
if (any)
{
Items.Insert(i++, new Separator {
Tag = TemporaryMark
});
}
}
}
else
{
foreach (var group in _items)
{
var any = false;
foreach (var item in group)
{
if (!any)
{
Items.Add(new Separator {
Tag = TemporaryMark
});
}
Items.Add(item);
item.Tag = TemporaryMark;
any = true;
}
}
}
_previouslyOpened = new WeakReference <InheritingContextMenu>(this);
base.OnOpened(e);
}