| Невозможно пройти тесты, в окне с вопросами пусто |
Работа с данными, сохранение и загрузка параметров игры
Посмотрим теперь на код страницы 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-файла.