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, this)).ToList();
ContextMenuAdvancement.ParentContextMenu.Clear();
_items = new List<List<FrameworkElement>>(_menus.Count);
foreach (var menu in _menus) {
_items.Add(menu.Items.OfType<FrameworkElement>().ToList());
menu.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);
}