微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

The run order about Loaded event and OnApplyTemplate in custom control of Silverlight 2 beta 2

I' ve created a customer control MenuLink.cs in silverlight 2beta2,and the code like this:

  1. public class MenuLink : Control
  2.  { 
  3.         public MenuLink( )
  4.         {          
  5.             DefaultStyleKey = typeof(MenuLink);
  6.             this.Loaded += new RoutedEventHandler(MenuLink_Loaded);
  7.         }
  8.         void MenuLink_Loaded(object sender, RoutedEventArgs e)
  9.         {
  10.             
  11.         }
  12.        
  13.         public override void OnApplyTemplate()
  14.         {
  15.             base.OnApplyTemplate();           
  16.         }
  17. }

There is a canvas named 'canMenu' in page 'Page.xaml',and i add the menulink into the canvas dynamicly:

  1.  public Page()
  2.         {
  3.             InitializeComponent();
  4.             this.Loaded += new RoutedEventHandler(Page_Loaded);            
  5.         } 
  6.         void Page_Loaded(object sender, RoutedEventArgs e)
  7.         {
  8.             MenuLink ml = new MenuLink(true);            
  9.             canMenu.Children.Clear();
  10.             canMenu.Children.Add(ml);
  11.         }

In this situation,the event in MenuLink.cs are called by this orders:

  1. 1. public MenuLink( bool a )
  2. 2. void MenuLink_Loaded(object sender, RoutedEventArgs e)
  3. 3. public override void OnApplyTemplate()

But if i add the menulink after downloading a xml file in page.cs like this:

  1.   public Page()
  2.         {
  3.             InitializeComponent();
  4.             this.Loaded += new RoutedEventHandler(Page_Loaded);            
  5.         } 
  6.         void Page_Loaded(object sender, RoutedEventArgs e)
  7.         {
  8.             WebClient webclient = new WebClient();
  9.             webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webclient_DownloadStringCompleted);
  10.             webclient.DownloadStringAsync(new Uri("a.xml",UriKind.Relative));          
  11.         }
  12.         void webclient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
  13.         {
  14.             MenuLink ml = new MenuLink(true);            
  15.             canMenu.Children.Clear();
  16.             canMenu.Children.Add(ml);
  17.         }

Then the order of events/methods called in MenuLink.cs like this:

  1. 1. public MenuLink( bool a )
  2. 2. public override void OnApplyTemplate()
  3. 3. void MenuLink_Loaded(object sender, RoutedEventArgs e)

 

I really don't kNow why?????

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐