sliverlight中一个用户自定义控件(比如MyControl.xaml)如果注册了CompositionTarget.Rendering事件(相当于Flash中的Enter_Frame,在进入每帧时触发),然后在MainPage.cs用代码动态添加时,有二个细节要注意:
1、MyControl实例在new出来以后,如果还未添加到MainPage.xaml中的根容器中,其对应的CompositionTarget.Rendering事件不被触发(这跟Flash中不同,Flash中只要new出来,不管有没有加入显示列表,Enter_Frame马上就跑起来了)
2、移除CompositionTarget.Rendering事件的问题,c#中没有提供类似as3中的removeEventListener功能,所以要想在MainPage.xaml.cs中移除MyControl实例的CompositionTarget.Rendering事件,只能手动在MyControl.xaml.cs中定义一个类似Stop()的公用方法,以CompositionTarget.Rendering -= ... 的形式解除事件响应,然后MainPage.xaml.cs中用类似_mycontrol.Stop()的方式来调用。(注:sliverlight中,就算开发者把MyControl实例设置为不可见,或者从根窗口中removeChild掉,其CompositionTarget.Rendering仍然是以背后一直跑的(Flash同样如此),这样会影响性能,所以在不需要的时候,建议干掉CompositionTarget.Rendering事件响应)