Статьи

Работа с событиями Silverlight

Событие — это просто метод, который выполняется, когда происходит какое-то действие. Это действие обычно выполняется пользователем, когда пользователь нажимает кнопку пальцем, но также может быть вызвано тем, что происходит внутри приложения.

Каждый элемент управления определяет ряд событий, на которые он может реагировать. Будучи разработчиком, я выбираю события, которые хочу выполнить, когда это событие запускается. Или я мог бы игнорировать события, как я делал это раньше с помощью простого элемента управления вводом, такого как текстовое поле. С другой стороны, если бы мне было нужно, я мог бы как-то реагировать на каждое отдельное событие. Это, вероятно, никогда не нужно, но это было бы возможно, если бы действительно нужно.

Чтобы увидеть список событий для каждого элемента управления, я бы зашел в окно свойств и щелкнул на вкладке событий. Например, я перетаскиваю кнопку в своей главной форме, а затем вижу каждое событие, которое может обработать элемент управления кнопки:

events1

Я мог выбрать любое событие для управления кнопками и дважды щелкнуть по нему.

Другой способ — дважды щелкнуть мою кнопку, чтобы создать обработчик событий по умолчанию, который для кнопки будет событием щелчка.

В обоих случаях это создание обработчика событий для моего кода, моего C # -файла, куда я затем могу добавить свой код.

Еще один способ — ввести текст в редакторе кода XAML:

Click="button1_Click"/>

IntelliSense помогает мне в этом.

Если я сейчас посмотрю на свой код C #, то заметлю, что VS уже создал для меня это событие click.

Я только что добавил вторую кнопку и TextBlock к моей основной форме. В моем редакторе XAML я ввожу то же событие click для второй кнопки:

<Button Content="Button"
        Height="72"
        HorizontalAlignment="Left"
        Margin="263,36,0,0"
        Name="button2"
        VerticalAlignment="Top"
        Width="160"
        Click="button1_Click"/>

Обратите внимание, что эта кнопка имеет название «button2», но событие щелчка по-прежнему говорит «button1».

В своем коде я просто добавляю две строки кода в обработчик события click:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Button myButton = (Button)sender;
        textBlock1.Text = myButton.Name;
    }

Прежде всего, я полагаюсь на параметр «отправитель». Этот параметр дает мне доступ к элементу управления, который вызвал событие. Второй параметр, это «RoutedEventArgs e», имеет дело с перенаправленными событиями. На высоком уровне Silverlight передает уведомления о событиях от родителя к потомку своему дочернему элементу и снова к его дочернему элементу, пока событие не будет окончательно перенаправлено последнему дочернему элементу.

В любом случае, чтобы сделать обработчик событий как можно более универсальным, отправитель имеет тип объекта. Объект — это тип данных, на котором основаны все остальные типы данных. Отправитель может быть любого типа данных. Итак, чтобы использовать это в моем коде, мне пришлось немного поработать. Мне как-то пришлось превратить его в кнопку, чтобы получить доступ к свойствам, доступным для кнопок, например, к свойству Name.

Это то, что я сделал. Я создал переменную myButton типа Button, а затем установил ее равной параметру отправителя. Но сначала я должен был преобразовать объект отправителя в тип кнопки. Приведение — это временное преобразование данных из одного типа данных в другой. Мне просто нужно преобразовать его достаточно долго, чтобы иметь возможность создать ссылку на этот объект в памяти и обработать его как кнопку. Для этого я использовал синтаксис Casting, где я использую открывающую и закрывающую скобки с типом, к которому я хочу привести, и добавляю префикс к объекту, который я хочу привести. В этом случае это будет «(кнопка) отправитель». Как только у меня появится ссылка на кнопку, которая фактически сработала из этого обработчика событий для этого объекта, и как только я получу его в правильном типе, нажмите кнопку type, и с этого момента я смогу получить доступ к тому, что я хочу получить из этого элемента управления.

events2  events3

У меня есть две кнопки с разными именами, обе используют один и тот же обработчик событий. Внутри обработчика событий я проверяю объект отправителя, приводю его к кнопке, чтобы получить доступ к его свойствам Я определяю, какая кнопка на самом деле отправила это событие нажатия, и затем записываю результат в TextBlock.

Итак, давайте завернем это. Некоторые события запускаются действием пользователя, например нажатием кнопки. Другие события запускаются самим телефоном, например, когда пользователь указывает, что хочет открыть приложение, первая страница приложения загружается, когда все элементы управления расположены правильно и приложение почти готово для отображения на экране. пользователь, загруженное событие вызывается на самом верхнем объекте PhoneApplicationPage.

Это идеальное место для инициализации элементов управления вводом, таких как заполнение их данными с сервера, которые можно получить из Интернета. Или данные из локального хранилища могут быть получены.

Давайте введем это загруженное событие:

    Loaded="PhoneApplicationPage_Loaded"

Итак, смысл в том, что: хотя некоторые события инициируются тем, что делает пользователь, некоторые события инициируются тем, что делает приложение или телефон. И разработчик может игнорировать или обрабатывать столько событий, сколько захочет.

 

Продолжение следует…

 

Источник:  http://andreahaubner.blog.com/2011/02/22/working-with-silverlight-events/