WEB开发网
开发学院图形图像Flash My Silverlight系列(7)—— Control的Loaded事件... 阅读

My Silverlight系列(7)—— Control的Loaded事件与OnApplyTemplate

 2009-04-25 12:04:42 来源:WEB开发网   
核心提示:首先,我介绍一下今天登场的两位主角——Loaded事件与OnApplyTemplate方法,My Silverlight系列(7)—— Control的Loaded事件与OnApplyTemplate,排名不分先后(热烈鼓掌ING~),微软是这么解释Loaded事件的: // Summary:

首先,我介绍一下今天登场的两位主角——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  下一页

Tags:My Silverlight 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接