Опубликован: 14.08.2012 | Доступ: свободный | Студентов: 881 / 20 | Оценка: 5.00 / 5.00 | Длительность: 09:59:00
Специальности: Программист
Самостоятельная работа 21:

Введение в Silverlight, знакомство с проектом, первое приложение

28.3. Структура проекта Silverlight-приложения

На рис. 28.12 вы можете видеть окно Обозреватель решений для нашего проекта.

Обозреватель решений проекта P21_1

Рис. 28.12. Обозреватель решений проекта P21_1

Некоторые из элементов этого окна вам уже знакомы по XNA-проектам. Напомним о значении этих, знакомых файлов и подробнее остановимся на элементах, специфичных для Silverlight-приложения.

  • AppManifest.xml – файл манифеста, нужен для создания пакета приложения
  • AssemblyInfo.cs – метаданные сборки.
  • WMAppManifest.cs – настройки приложения, специфичные для Windows Phone
  • App.xaml – параметры, данные, настройки уровня приложения.
  • App.xaml.cs – файл кода, связанный с файлом App.xaml (code-behind). Обработка событий и ошибок уровня приложения.
  • MainPage.xaml – главная страница приложения, описание разметки страницы на XAML.
  • MainPage.xaml.cs – код страницы. Именно здесь содержится программный код, имеющий отношение к главной странице.
  • ApplicationIcon.png – изображение ярлыка программы, которое используется для её отображения в общем списке программ.
  • Background.png – изображение ярлыка программы, которое используется в том случае, если программа закреплена на рабочем столе устройства.
  • SplashScreenImage.jpg – сплэш-скрин (стартовый экран) приложения – изображение, которое отображается при старте программы.

Рассмотрим файл App.xaml нашего приложения, его вы можете видеть в листинге 28.5.

<Application 
    x:Class="P21_1.App"
    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">

    <!--Ресурсы приложения-->
    <Application.Resources>
    </Application.Resources>

    <Application.ApplicationLifetimeObjects>
        <!--Обязательный объект, обрабатывающий события времени жизни приложения-->
        <shell:PhoneApplicationService 
            Launching="Application_Launching" Closing="Application_Closing" 
            Activated="Application_Activated" Deactivated="Application_Deactivated"/>
    </Application.ApplicationLifetimeObjects>

</Application>
Листинг 28.5. Файл App.xaml

В этом файле определяются четыре обработчика событий, код которых находится в файле App.xaml.cs. Это – события, которые позволяют управлять жизненным циклом приложения. Событие Launching происходит при запуске приложения, Closing – при выходе приложения, Deactivated – при деактивации приложения (например, если пользователь нажимает кнопку Домой при работе в приложении), Activated – при возврату к приложению после деактивации. Кроме того, здесь могут быть определены ресурсы приложения.

Посмотрим код файла App.xaml.cs

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.Navigation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;

namespace P21_1
{
    public partial class App : Application
    {
        /// <summary>
        /// Обеспечивает быстрый доступ к корневому кадру приложения телефона.
        /// </summary>
        /// <returns>Корневой кадр приложения телефона.</returns>
        public PhoneApplicationFrame RootFrame { get; private set; }

        /// <summary>
        /// Конструктор объекта приложения.
        /// </summary>
        public App()
        {
            // Глобальный обработчик неперехваченных исключений. 
            UnhandledException += Application_UnhandledException;

            // Стандартная инициализация Silverlight
            InitializeComponent();

            // Инициализация телефона
            InitializePhoneApplication();

            // Отображение сведений о профиле графики во время отладки.
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // Отображение текущих счетчиков частоты смены кадров.
                Application.Current.Host.Settings.EnableFrameRateCounter = true;

                // Отображение областей приложения, перерисовываемых в каждом кадре.
                //Application.Current.Host.Settings.EnableRedrawRegions = true;

                // Включение режима визуализации анализа нерабочего кода 
                // для отображения областей страницы, переданных в GPU, с цветным наложением.
                //Application.Current.Host.Settings.EnableCacheVisualization = true;

                // Отключите обнаружение простоя приложения, установив для свойства UserIdleDetectionMode
                // объекта PhoneApplicationService приложения значение Disabled.
                // Внимание! Используйте только в режиме отладки. 
                // Приложение, в котором отключено обнаружение бездействия пользователя, 
                // будет продолжать работать
                // и потреблять энергию батареи, когда телефон не будет использоваться.
                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
            }

        }

        // Код для выполнения при запуске приложения (например, из меню "Пуск")
        // Этот код не будет выполняться при повторной активации приложения
        private void Application_Launching(object sender, LaunchingEventArgs e)
        {
        }

        // Код для выполнения при активации приложения (переводится в основной режим)
        // Этот код не будет выполняться при первом запуске приложения
        private void Application_Activated(object sender, ActivatedEventArgs e)
        {
        }

        // Код для выполнения при деактивации приложения (отправляется в фоновый режим)
        // Этот код не будет выполняться при закрытии приложения
        private void Application_Deactivated(object sender, DeactivatedEventArgs e)
        {
        }

        // Код для выполнения при закрытии приложения (например, при нажатии пользователем кнопки "Назад")
        // Этот код не будет выполняться при деактивации приложения
        private void Application_Closing(object sender, ClosingEventArgs e)
        {
        }

        // Код для выполнения в случае ошибки навигации
        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // Ошибка навигации; перейти в отладчик
                System.Diagnostics.Debugger.Break();
            }
        }

        // Код для выполнения на необработанных исключениях
        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // Произошло необработанное исключение; перейти в отладчик
                System.Diagnostics.Debugger.Break();
            }
        }

        #region Инициализация приложения телефона

        // Избегайте двойной инициализации
        private bool phoneApplicationInitialized = false;

        // Не добавляйте в этот метод дополнительный код
        private void InitializePhoneApplication()
        {
            if (phoneApplicationInitialized)
                return;

            // Создайте кадр, но не задавайте для него значение RootVisual; это позволит
            // экрану-заставке оставаться активным, пока приложение не будет готово для визуализации.
            RootFrame = new PhoneApplicationFrame();
            RootFrame.Navigated += CompleteInitializePhoneApplication;

            // Обработка сбоев навигации
            RootFrame.NavigationFailed += RootFrame_NavigationFailed;

            // Убедитесь, что инициализация не выполняется повторно
            phoneApplicationInitialized = true;
        }

        // Не добавляйте в этот метод дополнительный код
        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
        {
            // Задайте корневой визуальный элемент для визуализации приложения
            if (RootVisual != RootFrame)
                RootVisual = RootFrame;

            // Удалите этот обработчик, т.к. он больше не нужен
            RootFrame.Navigated -= CompleteInitializePhoneApplication;
        }

        #endregion
    }
Листинг 28.6. Файл App.xaml.cs

Здесь, по умолчанию, заданы обработчики событий уровня приложения, часть из них мы обсуждали выше (к тому же, файл хорошо прокомментирован, что облегчает работу с ним). Здесь же выполняется инициализация приложения, настроен показ отладочной информации. Обратите внимание на объект RootFrame типа PhoneApplicationFrame. Этот объект является основой пользовательского интерфейса приложения, отвечает за расположение страниц на экране, за ориентацию экрана. Он напоминает веб-браузер, который отображает страницы приложения.

Обратите внимание на то, что участки кода, ответственные за работу с отладочной информацией, нужно убрать или закомментировать в готовом приложении.

Гулич Анна
Гулич Анна
Невозможно пройти тесты, в окне с вопросами пусто