For anyone else looking for a solution, my eventual approach was to use MouseOverEvent and a tree-walking Visitor pattern, checking canvases with Canvas.containsPoint(x,y)...