Хорошо, так что после небольшого тестирования это то, что у меня есть. Я не могу сказать, что это так однозначно, поскольку flash не выдает события для щелчка правой кнопкой мыши, так что это всего лишь предположение, но, похоже, оно оправдано.
В примечании вы не можете добавить контекстное меню на сцену, оно не разрешит его, поэтому самый низкий элемент, к которому вы можете добавить это, - это класс документа
Когда вы щелкаете правой кнопкой мыши на DisplayObject, он ищет ContextMenu для этого объекта. Если он не найдет его, он продолжит вверх по иерархии для того объекта, который ищет его, и остановится, когда найдет его. Примерно так:
stage
- document (has context menu1)
- parent (has context menu2)
- child
- parent2
В этом примере, если вы щелкнете правой кнопкой мыши на child
, меню не будет, поэтому оно выглядит как parent
. Здесь он находит context menu2
, так что показывает это. Однако, если вы щелкнете правой кнопкой мыши на parent2
, меню не будет, поэтому оно будет выглядеть как document
, и здесь оно найдет context menu1
.
Кажется, что это немного похоже на хак, когда вы щелкаете правой кнопкой мыши где-то еще на сцене (то есть где-то без графики). В этом случае, поскольку сцена не может иметь ContextMenu
(или, по крайней мере, вы не можете установить ее), кажется, что она решает использовать контекстное меню дочернего элемента на глубине 0 (обычно это класс документа).
Когда вы добавили фоновое изображение на глубину 0, вы увеличили класс документа до глубины 1. Теперь ваша иерархия выглядит примерно так:
stage
- bg
- document (has context menu1)
- parent (has context menu2)
- child
- parent2
Я предполагаю, что вы добавляете свое контекстное меню в класс документа (в этом примере context menu1
), поэтому, если в вашем классе документа нет некоторой графики, ваше событие будет искать до стадии, не находя контекста меню, затем попытайтесь найти контекстное меню дочернего элемента 0 - в данном случае bg
, которого нет.
Вы можете проверить это, нарисовав что-то в объекте graphics
вашего класса документов (или щелкнув по одному из вложенных элементов). Если вы щелкните правой кнопкой мыши на графике, вы увидите свое пользовательское меню, даже если bg
находится на глубине 0. В качестве альтернативы, вы можете добавить другое меню к bg
, чтобы увидеть, что я имею в виду.