Пример создания приложения Silverlight для Windows Phone
Для того чтобы приложение выполняло какие-то действия, нужно добавить код программы на языке C#, который выполнит необходимую работу. Когда Visual Studio создает файл XAML, который описывает страницу приложения Windows Phone, вместе с ним создается файл кода. В этот файл можно поместить код, который заставит приложение работать. Созданный файл уже содержит начальный код, который может выглядеть так:
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls; namespace PhoneApp1{ public partial class MainPage : PhoneApplicationPage { // Конструктор public MainPage() { InitializeComponent(); } }}Большую часть файла занимают инструкции using, которые позволяют программе напрямую обращаться к классам без необходимости указывать полный путь к ним. Например, вместо того чтобы записать System.Windows.Controls.Button, можно написать просто Button, потому что файл содержит строку
Единственный метод в программе — конструктор класса MainPage, который вызывается при создании класса. В конструкторе вызывается метод InitializeComponent, который создает экземпляры визуальных элементов. Этот код автоматически создает Visual Studio на основе XAML-файла, который описывает структуру страницы. Код этого метода не рекомендуется изменять напрямую, поскольку это может привести к ошибкам при выполнении программы.
Не нужно беспокоиться о том, как создаются и выводятся на экран визуальные объекты. Достаточно использовать высокоуровневые инструменты или научиться писать XAML-код для создания интерфейса страниц.
Создание приложения
Рассмотрим процесс создания интерфейс для нашей программы для сложения чисел. После того как мы добавим все необходимые элементы и запустим приложение, мы можем выполнить в нем некоторые действия. Мы можем ввести числа в текстовые поля и нажать на кнопку Cумма (рис. 5).
Если прикоснуться к элементу TextBox, появится экранная клавиатура, с помощью которой можно ввести числа в поля. Если мы прикоснемся к другой области экрана, клавиатура исчезнет. Однако, при нажатии на кнопку сумма мы не получим результат, поскольку приложение "не знает", что оно должно выполнять вычисления.
Рис. 5. Экран программы Сумматор с открытой экранной клавиатурой
Вычисление результата
Необходимо создать программный код для выполнения необходимых вычислений и вывода на экран результата:
private void calculateResult(){ float v1 = float.Parse(firstNumberTextBox.Text); float v2 = float.Parse(secondNumberTextBox.Text); float result = v1 + v2; resultTextBlock.Text = result.ToString();}Объекты TextBox работают со значением свойства Text, доступным для чтения и записи. При записи значения в свойство Text текст в текстовом поле изменится, а при считывании значения этого свойства программа получает значение, которое было введено в это поле.
Текст имеет строковый тип, который нужно преобразовать в числовое значение, для того чтобы можно было выполнить операцию сложения. Для этого используется метод Parse, который принимает в качестве параметра строку и возвращает записанное в строке число. Метод Parse есть у каждого из числовых типов (int, float, double и т.д.). Наша программа Сумматор может работать как с целыми, так и с дробными числами. Метод Parse класса float преобразует введенные в текстовые поля значения в численный тип и складывает их.
После этого, метод преобразует полученное значение в строку и записывает ее в свойство Text элемента resultTextBlock. Метод ToString противоположен Parse. Он возвращает текст, который описывает содержание объекта. Для типа float метод возвращает численное значение, записанное в строке.
В результате, мы получили код, который выполняет вычисления и получает результат. Теперь нужно, чтобы этот код выполнялся, когда пользователь нажимает на кнопку сумма.
События и программы
Во времена консольных приложений программа всегда запускалась с самого начала, работала некоторое время и затем завершала свою работу. Но теперь в нашем распоряжении есть богатые пользовательские интерфейсы с большим количеством кнопок и других элементов для взаимодействия с пользователями. В этой ситуации очень трудно написать программу, которая проверяла бы последовательно каждый элемент интерфейса, чтобы увидеть, попытался ли пользователь его использовать. Вместо этого, система ожидает от этих визуальных элементов каких то действий.
Использование событий существенно облегчает создание программ. Программа не должна проверять каждый элемент на экране, чтобы узнать, выполнил ли пользователь над ним какие-то действия — вместо этого программа просто отвечает на генерируемые события.
Чтобы заставить события работать, языку программирования нужен способ представления ссылки на метод объекта, для чего в C# используется механизм делегатов. Можно создать тип делегата, который может обратиться к определенному методу, и создать экземпляр этого делегата, который обращается к методу в объекте. Делегаты являются мощным и полезным механизмом.
События в Silverlight
В C# событие отправляется объекту посредством вызова метода этого объекта. В нашей программе Сумматор когда пользователь нажимает на кнопку сумма, программа должна вызвать нужный метод, например, метод calculateResult.
Можно использовать редактор Visual Studio: чтобы связать метод с событием щелчка кнопки мыши, нужно дважды щелкнуть по этой кнопке в окне дизайнера. При этом, Visual Studio устанавливает свойства кнопки в XAML, для того чтобы связать кнопку с методом страницы. Кроме этого, создается пустая версия этого метода-обработчика, и среда переносит курсор к этому методу, чтобы можно было сразу начать добавлять код, который должен выполняться при нажатии кнопки.
Теперь нужно просто добавить следующий код, который выполнит необходимые действия:
private void calculateResult(){ float v1 = float.Parse(firstNumberTextBox.Text); float v2 = float.Parse(secondNumberTextBox.Text); float result = v1 + v2; resultTextBlock.Text = result.ToString();} private void equalsButton_Click(object sender, RoutedEventArgs e){ calculateResult();}Созданному обработчику событий Visual Studio автоматически присваивает имя, которое формируется из имени элемента, в конец которого добавляется текст _Click. Таким образом, по этому имени можно легко определить, каким образом он вызывается.
Теперь программа работает. Однако, если пользователь введет в текстовое поле нечисловое значение, то программа сгенерирует исключение.