В чем разница между UserControl_Loaded и Page_Loaded в Silverlight?

Я пытаюсь написать приложение silverlight, которое принимает InitParams, а затем использует эти InitParams для изменения Source MediaElement на странице. Я пытаюсь найти правильное место для размещения кода.

Я смотрел отличное видео на InitParams, но в видео (которое было для Silverlight 2) на странице Page.xaml.cs отображается следующее:

void Page_Loaded(object sender, RoutedEventArgs e)
    {

    }

Я не вижу Page_Loaded, когда открываю MainPage.xaml.cs, и мне интересно, было ли это автоматически создано в Silverlight 2 SDK и оставлено вне Silverlight 3 SDK. Или, возможно, Тим добавил это в своем видео вручную.

Я обнаружил, что могу войти в открывающий тег UserControl файла MainPage.xaml и добавить Loaded="<New_Event_Handler>", который создает в MainPage.xaml.cs следующее:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {

    }

По умолчанию в MainPage.xaml.cs, который запускается во время события Application_Startup в App.xaml.cs, также есть следующее:

public MainPage()
    {            
        InitializeComponent();
    }

Мне нужно выяснить, где лучше всего вставить мой код, чтобы изменить Source на моем MediaElement в моем xaml. Положить в MainPage? Должен ли я добавить обработчик событий Loaded и поместить его в UserControl_Loaded? Если это должно быть Page_Loaded, где мне найти это в Silverlight 3?

Любая помощь приветствуется.


person Ben McCormack    schedule 01.09.2009    source источник


Ответы (1)


«UserControl_Loaded» и «Page_Loaded» - это просто имена методов, и имена не имеют значения (вы можете назвать метод «Foo», если хотите). Что заставляет эти методы делать что-либо, так это то, что они прикреплены к событию Loaded в UserControl (что вы и сделали при редактировании файла MainPage.xaml).

person KeithMahoney    schedule 01.09.2009
comment
Хорошо, в этом есть смысл. Тем не менее, есть ли преимущество в размещении их в UserControl_Loaded вместо MainPage ()? - person Ben McCormack; 02.09.2009
comment
Разница между размещением кода в конструкторе и обработчиком событий Loaded заключается в том, когда эти методы вызываются. Конструктор будет вызываться первым, как только будет создан экземпляр элемента управления. Через некоторое время после этого сработает событие Loaded. Одно из преимуществ, которое иногда имеет Loaded, заключается в том, что любые свойства, которые установлены для объекта в Xaml, будут иметь свои значения, инициализированные к моменту запуска Loaded - не так с конструктором. Но поскольку вы вызываете InitializeComponent () в своем конструкторе, это не имеет значения, если ваш код идет после этого вызова. - person KeithMahoney; 02.09.2009