There is a software design principle that states “Favor composition over inheritance”
Inheritance is a cool way to change behavior. But we know that it's brittle, because the subclass can easily make assumptions about the context in which a method it overrides is getting called. There's a tight coupling between the base class and the subclass, because of the implicit context in which the subclass code I plug in will be called. Composition has a nicer property. The coupling is reduced by just having some smaller things you plug into something bigger, and the bigger object just calls the smaller object back. From an API point of view defining that a method can be overridden is a stronger commitment than defining that a method can be called.
That Principe my friends is valid for Xaf also. So overriding other controllers should be considered a bad practice and your controllers should be design to expose all functionality needed to be able to be composed by a statement like this
Frame.GetController<MyController>().MyCustomEvent+= (sender, args) => DoSomething(args);
form any other controller thus achieving all the above.