当前位置:主页   - 电脑 - 图形图像 - Flash
My Silverlight系列(7)—— Control的Loaded事件与OnApplyTemplate
来源:网络   作者:   更新时间:2012-08-14
收藏此页】    【字号    】    【打印】    【关闭

  首先,我介绍一下今天登场的两位主角——Loaded事件与OnApplyTemplate方法,排名不分先后(热烈鼓掌ING~)。

  微软是这么解释Loaded事件的:

        // Summary:
        //     Occurs when the element has completed layout passes, has rendered, and is
        //     ready for interaction.
        public event RoutedEventHandler Loaded;

  我想这几句鸟语就不用我翻译了,意思就是说这个事件是发生在这个控件的布局已经搞定并且可以对用户输入做出反应的那个时间点上。

  然后我再说说这个ApplyTemplate(),再看微软的说明:

        // Summary:
        //     When overridden in a derived class, is invoked whenever application code
        //     or internal processes (such as a rebuilding layout pass) call  System.Windows.Controls.Control.ApplyTemplate().
        [SecuritySafeCritical]
        public virtual void OnApplyTemplate();

  这几句鸟语的意思是说,当你重载一个子类的时候,这个方法会在代码或者内部操作(比如重新构造布局)调用ApplyTemplate()方法的时候被调用。

  那么问题来了,当一个有Template的Control在加载的时候,是先ApplyTemplate呢,还是先触发Loaded事件呢?

  答案是不一定,为此我专门写了代码进行测试,首先我重载了两个通用控件,然后重写了它们的OnApplyTemplate()方法,代码如下:

    public class MyButton:Button
    {
        public override void OnApplyTemplate()
        {
            Debug.WriteLine("Button Applied at" + DateTime.Now.ToString("o"));
            base.OnApplyTemplate();
        }
    }

    public class MyCheckBox : CheckBox
    {
        public override void OnApplyTemplate()
        {
            Debug.WriteLine("CheckBox Applied at " + DateTime.Now.ToString("o"));
            base.OnApplyTemplate();
        }
    }

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明