Опубликован: 02.08.2013 | Доступ: свободный | Студентов: 465 / 15 | Длительность: 18:38:00
Специальности: Программист
Самостоятельная работа 5:

Обмен данными внутри приложения

< Самостоятельная работа 4 || Самостоятельная работа 5: 123 || Лекция 15 >

При создании объекта MyBrush мы инициализировали его цветом Green из системного перечисления Colors, то есть, по умолчанию цвет кисти будет зеленым.

В Листинге 19.3 приведен код страницы CommonPage.xaml (рис. 9.1.), здесь нас интересуют прямоугольник и текстовое поле.

Обновленный внешний вид страницы CommonPage.xaml

увеличить изображение
Рис. 19.1. Обновленный внешний вид страницы CommonPage.xaml
<phone:PhoneApplicationPage
    x:Class="P4_1.CommonPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot представляет корневую сетку, где размещается все содержимое страницы-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel содержит имя приложения и заголовок страницы-->
        <StackPanel Grid.Row="0" Margin="12,17,0,28">
            <TextBlock Text="НАВИГАЦИЯ" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock Text="страница" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel – поместите здесь дополнительное содержимое-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <TextBlock x:Name="txtUserName" HorizontalAlignment="Left" Margin="10,10,0,0" 
TextWrapping="Wrap" VerticalAlignment="Top" 
Height="50" Width="446"/>
            <Rectangle x:Name="rectColor" HorizontalAlignment="Left" 
Height="111" Margin="141,156,0,0" Stroke="Black" 
VerticalAlignment="Top" Width="183" Fill="#FFF4F4F5"/>
        </Grid>
    </Grid>
    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" Mode="Minimized">
            <shell:ApplicationBarIconButton IconUri="/Images/questionmark.png" 
Text="О программе" Click="ApplicationBarIconButton_Click"/>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="Настройки" Click="ApplicationBarMenuItem_Click"/>
                <shell:ApplicationBarMenuItem Text="Команда меню"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>
</phone:PhoneApplicationPage>
Листинг 19.3. Код страницы CommonPage.xaml

Для разбора параметров, которые переданы странице при вызове её со страницы MainPage.xaml мы применяем обработчик события OnNavigatedTo. Там же мы получаем значение общего поля MyBrush из класса App и применяем его к прямоугольнику (Листинг 10.4).

using System;
using System.Windows;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using System.Collections.Generic;
using Microsoft.Phone.Shell;

namespace P4_1
{
    public partial class CommonPage : PhoneApplicationPage
    {
        public CommonPage()
        {
            InitializeComponent();
        }

        private void ApplicationBarMenuItem_Click(object sender, EventArgs e)
        {
            NavigationService.Navigate(new Uri("/Pages/Settings.xaml", UriKind.Relative));
        }

        private void ApplicationBarIconButton_Click(object sender, EventArgs e)
        {
            NavigationService.Navigate(new Uri("/About.xaml", UriKind.Relative));
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            IDictionary<string, string> parameters = this.NavigationContext.QueryString;

            if (parameters.ContainsKey("User_name"))
            {
                txtUserName.Text = "Здравствуйте, "+parameters["User_name"];
            }

            rectColor.Fill = (Application.Current as App).MyBrush;

            base.OnNavigatedTo(e);
        }
    }
}
Листинг 19.4. Код страницы CommonPage.xaml.cs

Для работы со словарем (объект типа IDictionary) мы, в обработчике события OnNavigatedTo подключили пространство имен System.Collections.Generic. В словаре оказываются параметры, переданные странице при вызове. Далее мы проверяем, имеется ли в словаре ключ "User_name" (регистр символов имеет значение), если имеется – записываем в поле txtUserName текст приветствия с именем пользователя, обратившись к соответствующему элементу словаря по ключу.

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

На странице Settings.xaml, рис. 9.2, (Листинг 19.5), мы разместили элемент управления ColorPicker с именем cpMy (его можно найти в пакете элементов управления Coding4Fun, в одной из предыдущих работ мы рассматривали использование пакетов элементов управления сторонних разработчиков).

Обновленный внешний вид страницы Settings.xaml

увеличить изображение
Рис. 19.2. Обновленный внешний вид страницы Settings.xaml
<phone:PhoneApplicationPage
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Controls="clr-namespace:Coding4Fun.Toolkit.Controls;assembly=Coding4Fun.Toolkit.Controls"
    x:Class="P4_1.Pages.Settings"
    mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait"  Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot представляет корневую сетку, где размещается все содержимое страницы-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <!--Элемент управления Pivot-->
        <phone:Pivot Title="НАВИГАЦИЯ">
            <!--Первый элемент Pivot-->
            <phone:PivotItem Header="цвет">
                <Controls:ColorPicker x:Name="cpMy" HorizontalAlignment="Left" Height="603" VerticalAlignment="Top" Width="456" />
            </phone:PivotItem>

            <!--Второй элемент Pivot-->
            <phone:PivotItem Header="размер">
                <Grid/>
            </phone:PivotItem>

            <!--Третий элемент Pivot-->
            <phone:PivotItem Header="общие">
                <Button x:Name="cmdLogOut" Content="Выйти из системы" HorizontalAlignment="Left" 
Height="83" Margin="52,84,0,0" VerticalAlignment="Top" 
Width="259" Click="cmdLogOut_Click"/>
            </phone:PivotItem>
        </phone:Pivot>
    </Grid>

</phone:PhoneApplicationPage>
Листинг 19.5. Код страницы Settings.xaml.cs
< Самостоятельная работа 4 || Самостоятельная работа 5: 123 || Лекция 15 >