sliverlight:CompositionTarget.Rendering 的问题

本文探讨了在Silverlight中使用自定义控件时与CompositionTarget.Rendering事件相关的两个关键细节。首先,事件仅在控件添加到根容器后触发;其次,介绍了如何手动移除事件监听器以提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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事件响应)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值