Невозможно пройти тесты, в окне с вопросами пусто |
Работа с данными, сохранение и загрузка параметров игры
Посмотрим теперь на код страницы MainPage, для удобства он приведен целиком в листинге 32.5.
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 P25_2 { public partial class MainPage : PhoneApplicationPage { // Конструктор public MainPage() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { if (textBox1.Text == "" || textBox1.Text == "Введите ваше имя") { MessageBox.Show("Введите имя пользователя!"); } else { //Сохраняем имя пользователя (Application.Current as App).Username = textBox1.Text; //Формируем адрес string gamePageCall = "/Game.xaml"; NavigationService.Navigate(new Uri(gamePageCall, UriKind.Relative)); } } private void textBox1_GotFocus(object sender, RoutedEventArgs e) { textBox1.Text = ""; } //Активация страницы protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { int scores = (Application.Current as App).Scores; string username = (Application.Current as App).Username; if (username != "") { textBox1.Text = username; //Сформируем сообщение о набранных очках, это, как минимум, 0 очков textBlock2.Text = "Пользователь " + username + " набрал " + scores.ToString() + " очка (ов) (о)"; } else { textBox1.Text = "Введите ваше имя"; } base.OnNavigatedTo(e); } } }Листинг 32.5. Код страницы MainPage
Здесь мы, в методе OnNavigatedTo (он выполняется и при первом запуске приложения, и при возврате на эту страницу со страницы Game), читаем значения переменных Scores и Username из полей класса App. Если имя пользователя не пустое, мы выводим его в поле textBox1 и выводим информацию о том, сколько очков набрал пользователь за прошлый сеанс игры. Если поле пустое, в textBox1 попадает приглашение ввести имя пользователя.
При щелчке по кнопке мы проверяем, заполнил ли пользователь поле, сравнивая его значение с пустой строкой (если он, например, щёлкнул по полю, но ничего не вводил), либо со строкой "Введите ваше имя". Она отображается в поле в том случае, если программа запущена в первый раз или тогда, когда запуск не первый, но в предыдущем запуске пользователь в поле ничего не вводил. Если поле заполнено, мы записываем его в общедоступную переменную класса App и вызываем страницу Game. Параметры при вызове нам в данном случае не нужны, так как мы используем для обмена данными между страницами открытые поля класса App.
Посмотрим код страницы Game, листинг 32.6.
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 P25_2 { public partial class Game : PhoneApplicationPage { public Game() { InitializeComponent(); } //Получение и применение данных protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { string username = (Application.Current as App).Username; textBlock1.Text = "Здравствуйте, " + username+ "!"; base.OnNavigatedTo(e); } //Подсчёт числа касаний экрана private void PhoneApplicationPage_Tap(object sender, GestureEventArgs e) { textBlock4.Text = (Convert.ToInt32(textBlock4.Text) + 1).ToString(); } //Запись количества набранных очков private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { (Application.Current as App).Scores = Convert.ToInt32(textBlock4.Text); } } }Листинг 32.6. Код страницы Gam
Главная, новая, особенность здесь заключается в том, что в методе OnNavigateTo мы получаем значение свойства Username из App и используем его при формировании приветствия пользователя.
32.3. Выводы
В этой лабораторной работе мы освоили хранение в приложении данных, доступных всем страницам, передачу параметров при вызове страниц, использование изолированного хранилища настроект.
32.4. Задание
Создайте Silverlight-приложение, которое использует для хранения данных изолированное хранилище и хранит данные в виде XML-файла.