First trivial idea is: you can always wrap the canvas in some wrapper
facade class where all the operations you are interested in comes with notifications you need. You should simply add appropriate events to the wrapper class and invoke them on those operations.
(Please see: http://en.wikipedia.org/wiki/Facade_pattern[^].)If you need to get notifications on some or all properties of the canvas children, it's a bit more complex. First of all, some properties like child position are
attached properties, so you track then via a canvas (and hence your facade wrapper class). Please see:
http://msdn.microsoft.com/en-us/library/ms745811.aspx[
^].
(For more information on dependency properties and attached properties, please see:
http://msdn.microsoft.com/en-us/library/ms752914.aspx[^],
http://msdn.microsoft.com/en-us/library/ms749011.aspx[^].
This CodeProject article can also be useful: WPF Tutorial - Dependency Property[^].)As to the other properties of the children, you can make the facade adding appropriate event handlers to the children on the fly, using "+=" operator, by the facade methods responsible for adding children to a canvas instance wrapped.
This all needs some thinking, but I think you can understand the ideas.
—SA