Главная » Разработка для Windows Phone 7 » Передача данных на страницы Windows Phone 7

0

Вероятность использования страниц в качестве диалоговых окон подымает два вопроса:

•                                   Как реализовать передачу данных с исходной страницы на страницу перехода?

•                                   Как обеспечить возвращение данных при возвращении на исходную страницу?

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

Следующий проект называется SilverlightPassData. Он практически повторяет первый пример данной главы, за исключением того что при переходе с MainPage к SecondPage в SecondPage передается текущий цвет фона главной страницы, и SecondPage создается с этим исходным цветом.

Область содержимого MainPage.xaml такая же, как и в предыдущем приложении: Проект Silverlight: SilverlightPassData Файл: MainPage.xaml (фрагмент)

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Text="Navigate to 2nd Page" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="0 34"

ManipulationStarted="OnTextBlockManipulationStarted" />

</Grid>

Не будем останавливаться на перегруженном методе OnManipulationStarted, он абсолютно аналогичен предыдущему примеру, а вот обработчик события ManipulationStarted для TextBlock немного доработан:

Проект Silverlight: SilverlightPassData Файл: MainPage.xaml.cs (фрагмент)

void OnTextBlockManipulationStarted(object sender, ManipulationStartedEventArgs

args) {

string destination = "/SecondPage.xaml";

if (ContentPanel.Background is SolidColorBrush) {

Color clr = (ContentPanel.Background as SolidColorBrush).Color; destination += String.Format("?Red={0}&Green={1}&Blue={2}",

clr.R, clr.G, clr.B);

}

this.NavigationService.Navigate(new Uri(destination, UriKind.Relative));

args.Complete(); args.Handled = true;

Если для ContentPanel (Панель содержимого) в качестве Background (Фон) используется кисть SolidColorBrush, обработчик получает Color и трансформирует значения для красного, зеленого и синего каналов в строку, которая прикрепляется к имени страницы перехода. После этого URI приобретает примерно такой вид:

7SecondPage.xaml?Red=244&Green=43&Blue=91"

Как видите, это обычная строка HTML-запроса.

Также в проекте SilverlightPassData имеется класс SecondPage, полностью аналогичный классу с таким же именем из первого проекта за исключением того, что в файл выделенного кода включен перегруженный метод OnNavigatedTo (При переходе к):

Проект Silverlight: SilverlightPassData Файл: SecondPage.xaml.cs (фрагмент)

protected override void OnNavigatedTo(NavigationEventArgs args) {

IDictionary<string, string> parameters = this.NavigationContext.QueryString;

if (parameters.ContainsKey("Red")) {

byte R = Byte.Parse(parameters["Red"]); byte G = Byte.Parse(parameters["Green"]); byte B = Byte.Parse(parameters["Blue"]);

ContentPanel.Background =

new SolidColorBrush(Color.FromArgb(255, R, G, B));

}

base.OnNavigatedTo(args);

}

В класс NavigationEventArgs (Параметры события перехода) посредством директивы using понадобится включить пространство имен System.Windows.Navigation.

Метод OnNavigatedTo определяется классом Page, от которого наследуется PhoneApplicationPage. Этот метод вызывается сразу после создания страницы. В тот момент, когда вызывается OnNavigatedTo, конструктор страницы уже выполнен, конечно же, но практически больше ничего не произошло.

Класс страницы перехода может выполнять доступ к строкам запроса, используемым для вызова страницы, через свойство NavigationContext (Контекст перехода) типа NavigationContext. У класса NavigationContext только одно открытое свойство QueryString (Строка запроса), которое возвращает словарь, сохраненный в переменной parameters (параметры). В данном примере предполагается, что если присутствует строка запроса «Red», то должны существовать также «Blue» и «Green». Все строки передаются в метод Byte.Parse, в котором на их основании выполняется восстановление значения цвета.

Теперь при переходе с MainPage к SecondPage цвет фона остается неизменным. Однако при возвращении назад на MainPage этого не происходит. Такой встроенной возможности, как строка запроса, для передачи данных с одной страницы на другую нет.

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

  • Комментарии