Общие сведения об управлении приложением
Обновлен: Июль 2008
Этот раздел предоставляет обзор служб WPF (Windows Presentation Foundation) для создания и управления приложениями. Ядро WPF-приложения является классом Application, который поддерживает ряд основных служб приложений. Этот раздел предоставляет введение в наиболее важные из этих служб.
В этом разделе содержатся следующие подразделы.
- Класс приложения
- Определение приложения
- Получение текущего приложения
- Время жизни приложения
- Другие службы приложения
- Связанные разделы
Класс приложения
Приложение состоит из множества элементов, специфичных для приложения, включая пользовательский интерфейс, бизнес-логику, логику доступа к данным, элементы управления и данные. Эти элементы обычно отличаются в различных приложениях. Тем не менее, все приложения имеют тенденцию совместно использовать общий набор функциональных возможностей, которые способствуют реализации и управлению приложения. В WPF эти общие функциональные возможности области приложения инкапсулируются классом помощью Application, который предоставляет следующие службы:
Создание и управление общей инфраструктурой приложений.
Отслеживание и взаимодействие со временем жизни приложения.
Извлечение и обработка параметров командной строки.
Совместное использование свойств области приложения и ресурсов.
Обнаружение и реагирование на необработанные исключения.
Возврат кодов завершения.
Управление окнами автономных приложений (см.: Общие сведения об окнах WPF).
Отслеживание и управление навигацией (см.: Общие сведения о переходах).
Для использования этих служб в приложении, вам необходимо использовать класс Application, чтобы реализовать определение приложения.
Определение приложения
Определение приложения WPF представляет собой класс, производный от Application и настроенный со специальным параметром MSBuild (Microsoft build engine).
Реализация определения приложения
Обычное определение приложения WPF реализуется с помощью разметки и фонового кода. Это позволяет использовать разметку для декларативного задания свойств, ресурсов и регистрации событий приложения во время обработки событий и реализации поведения приложения в фоновом коде.
В следующем примере показано, как реализовать определение приложения с помощью разметки и фонового кода:
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App" />
using System.Windows; // Application
namespace SDKSample
{
public partial class App : Application { }
}
Чтобы разрешить файл разметки и файл с выделенным кодом для совместной работы, нужно следующее:
В разметке элемент Application должен включать атрибут x:Class. При построении приложения существование x:Class в файле разметки означает MSBuild для создания класса partial, производного от Page с именем, которое определяется атрибутом x:Class. Для этого требуется добавить объявление пространства имен XML в схему XAML (xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml").
В фоновом коде класс должен быть partial классом с тем же именем, которое определяется атрибутом x:Class в разметке, и он должен быть производным от Application. Это позволяет связать файл с выделенным кодом с классом partial, созданным для файла разметки при построении приложения (см. раздел Построение приложения WPF).
Примечание. |
---|
При создании нового проекта приложения WPF или проекта приложения веб-обозревателя WPF с помощью Microsoft Visual Studio, определение приложения включается по умолчанию и определяется с помощью разметки и фонового кода. |
Этот код является минимумом, необходимым для реализации определения приложения. Однако, должна быть создана дополнительная конфигурация MSBuild для определения приложения до построения и запуска приложения.
Настройка определения приложения для MSBuild
Автономные приложения и XBAP (XAML browser applications — приложения обозревателя XAML) требуют реализацию инфраструктуры определенного уровня перед своим запуском. Наиболее важной частью этой инфраструктуры является точка входа. При запуске пользователем приложения, операционная система вызывает точку входа, которая является известной функцией для запуска приложений.
Обычно разработчики должны были написать часть или весь этот код для себя, в зависимости от технологии. Однако WPF создает этот код для вас при настройке файла разметки вашего определения приложения в качестве элемента MSBuild ApplicationDefinition, как показано в следующем файле проекта MSBuild:
<Project
DefaultTargets="Build"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
...
<ApplicationDefinition Include="App.xaml" />
<Compile Include="App.xaml.cs" />
...
</Project>
Так как файл с выделенным кодом содержит код, он помечается как элемент MSBuild Compile, как обычный.
Применение этих конфигураций MSBuild к файлам разметки и с выделенным кодом определения приложения заставляет MSBuild создавать код следующим образом:
using System; // STAThread
using System.Windows; // Application
namespace SDKSample
{
public class App : Application
{
public App() { }
[STAThread]
public static void Main()
{
// Create new instance of application subclass
App app = new App();
// Code to register events and set properties that were
// defined in XAML in the application definition
app.InitializeComponent();
// Start running the application
app.Run();
}
public void InitializeComponent()
{
...
}
}
}
Результирующий код дополняет ваше определение приложения дополнительным кодом инфраструктуры, которая включает метод точки входа Main. Атрибут STAThreadAttribute применяется к методу Main, чтобы указать, что основной поток Пользовательский интерфейс для приложения WPF является STA-потоком, который необходим для приложений WPF. При вызове Main создает новый экземпляр класса App до вызова метода InitializeComponent для регистрации событий и установки свойств, реализованных в разметке. Поскольку InitializeComponent создан для вас, вам не требуется явно вызывать InitializeComponent из определения приложения как для реализаций Page и Window. Наконец, вызывается метод Run для запуска приложения.
Получение текущего приложения
Так как службы класса Application являются общими для всего приложения, может существовать только один экземпляр класса Application на каждый AppDomain. Для применения этого, класс Application реализуется как одноэлементный класс (см. раздел Реализация Singleton в C#), который создает один экземпляр самого себя и обеспечивает общий доступ к нему с помощью свойства static Current.
Следующий фрагмент кода иллюстрирует получение ссылки на объект Application для текущего AppDomain.
// Get current application
Application current = App.Current;
Current возвращает ссылку на экземпляр класса Application. Если вам требуется ссылка на ваш производный класс Application, вам необходимо привести значение свойства Current, как показано в следующем примере.
// Get strongly-typed current application
App app = (App)App.Current;
Можно проверить значение Current в любой момент времени жизни объекта Application. Однако следует соблюдать осторожность. После того, как создается класс Application, есть период, в течение которого состояние объекта Application непредсказуемо. В течение этого периода Application выполняет различные задачи инициализации, необходимые коду для выполнения, включая установку инфраструктуры приложений, настройку свойств и регистрацию событий. Если использовать объект Application в течение этого периода, то выполнение кода может привести к неожиданным результатам, особенно если он зависит от различных установленных свойств Application.
Когда Application завершает свою работу инициализации, начинается его время жизни.
Время жизни приложения
Время жизни приложения WPF помечено несколькими событиями, которые вызываются Application, чтобы позволить вам знать, когда ваше приложении запущено, активировано, отключено и завершило работу.
Экран-заставка
Начиная с версии .NET Framework 3.5 с пакетом обновления 1 (SP1), можно указать изображение, которое должно использоваться в окне запуска, или на экране-заставке. Класс SplashScreen позволяет легко отобразить окно запуска во время загрузки приложения. Окно SplashScreen создается и отображается перед вызовом Run. Дополнительные сведения см. в разделах Время запуска приложения и Практическое руководство. Добавление в WPF-приложение экрана-заставки.
Запуск приложения
После того как Run вызвано и инициализировано приложение, приложение готово к выполнению. Этим моментом принимается вызов события Startup:
using System.Windows; // Application, StartupEventArgs, WindowState
namespace SDKSample
{
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
// Application is running
...
}
}
}
В этот момент жизни приложения наиболее обычной вещью является показ Пользовательский интерфейс.
Отображение интерфейса пользователя
Большинство автономных приложений Windows открывают Window, когда они начинают выполнение. Обработчик событий Startup является одним расположением, откуда вы можете сделать это, как продемонстрировано следующим кодом.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
Startup="App_Startup" />
using System.Windows; // Application, StartupEventArgs
namespace SDKSample
{
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
// Open a window
MainWindow window = new MainWindow();
window.Show();
}
}
}
Примечание. |
---|
Первое Window, создающееся в автономном приложении становится главным окном приложения по умолчанию. Этот объект Window ссылается на свойство Application.MainWindow. Значение свойства MainWindow может быть изменено программными средствами, если другое окно Window станет главным окном. |
При первом запуске XBAP, оно скорее всего перейдет на Page. Это показано в следующем коде.
Если вы обрабатываете Startup только чтобы открыть Window или перейти на Page, вместо этого вы можете установить атрибут StartupUri в разметке.
В следующем примере показано использование StartupUri из изолированного приложения для открытия Window.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="MainWindow.xaml" />
В следующем примере показано, как использовать StartupUri из XBAP, чтобы перейти на Page.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="HomePage.xaml" />
Эта разметка действует так же, как и предыдущий код для открытия окна.
Примечание. |
---|
Дополнительные сведения о навигации содержатся в разделе Общие сведения о переходах. |
Вам необходимо обрабатывать событие Startup, чтобы открыть Window, если вам необходимо создать его экземпляр с помощью конструктора не по умолчанию или вам необходимо задать его свойства или подписаться на его события перед его отображением, или вам необходимо обработать любые аргументы командной строки, которые были заданы при запуске приложения.
Обработка аргументов командной строки
В Windows автономные приложения можно запустить из командной строки или с рабочего стола. В обоих случаях аргументы командной строки могут быть переданы приложению. В следующем примере показано приложение, которое запускается с одним аргументом командной строки, "/StartMinimized":
wpfapplication.exe /StartMinimized
Во время инициализации приложения WPF получает аргументы командной строки из операционной системы и передает их обработчику событий Startup с помощью свойства Args параметра StartupEventArgs. Можно извлечь и сохранить аргументы командной строки с помощью следующего кода.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
Startup="App_Startup" />
using System.Windows; // Application, StartupEventArgs, WindowState
namespace SDKSample
{
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
// Application is running
// Process command line args
bool startMinimized = false;
for (int i = 0; i != e.Args.Length; ++i)
{
if (e.Args[i] == "/StartMinimized")
{
startMinimized = true;
}
}
// Create main application window, starting minimized if specified
MainWindow mainWindow = new MainWindow();
if (startMinimized)
{
mainWindow.WindowState = WindowState.Minimized;
}
mainWindow.Show();
}
}
}
Код обрабатывает Startup, чтобы проверить, передан ли аргумент командной строки /StartMinimized; если это так, он открывает главное окно с WindowState Minimized. Обратите внимание, что поскольку свойство WindowState должно быть установлено программными средствами, главное Window должно быть явным образом открыто в коде.
Пример, демонстрирующий более надежный метод разбора командной строки, использующий регулярные выражения, содержится в разделе Пример обработки аргументов командной строки.
XBAP не может получить и обработать аргументы командной строки, так как они загружены с помощью развертывания ClickOnce (см.: Развертывание приложений WPF). Однако они могут получать и обрабатывать строковые параметры запроса из URL-адресов, которые используются для их запуска. Пример см. в разделе Пример получения параметров строки запроса универсального кода ресурса (URI).
Активация и деактивация приложения
Windows позволяет пользователям переключаться между приложениями. Наиболее простой способ — использовать сочетание клавиш ALT + TAB. Приложение может быть переключено, только если оно содержит видимое Window, которое пользователь может выбрать. Выбранный в данный момент Window является активным окном (также известным как окно переднего плана), которое получает входные данные пользователя. Приложение с активным окном является активным приложением (или приложением переднего плана). Приложение становится активным в следующих случаях:
Оно запущено и показывает Window.
Пользователь переключается из другого приложения, выбрав Window в приложении.
Вы можете обнаружить, что приложение активируется при обработке события Application.Activated.
Аналогичным образом приложение может стать неактивным в следующих случаях:
Пользователь переключается на другое приложение из текущего.
Когда приложение завершает работу.
Вы можете обнаружить, что приложение дезактивируется при обработке события Application.Deactivated.
Следующий фрагмент кода показывает, как обрабатывать события Activated и Deactivated, чтобы определить, активно ли приложение.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
Activated="App_Activated"
Deactivated="App_Deactivated" />
using System; // EventArgs
using System.Windows; // Application
namespace SDKSample
{
public partial class App : Application
{
bool isApplicationActive;
void App_Activated(object sender, EventArgs e)
{
// Application activated
this.isApplicationActive = true;
}
void App_Deactivated(object sender, EventArgs e)
{
// Application deactivated
this.isApplicationActive = false;
}
}
}
Window также может быть активировано и дезактивировано. Дополнительные сведения см. в разделах Window.Activated и Window.Deactivated.
Примечание. |
---|
Ни Application.Activated, ни Application.Deactivated не вызывается для XBAP. |
Завершение работы приложения
Время жизни приложения заканчивается, когда оно завершает работу, что может возникнуть по следующим причинам:
Пользователь закрывает каждое Window.
Пользователь закрывает основное Window.
Пользователь завершает сеанс Windows выходом или завершением работы.
Выполнено специальное условие для приложения.
Чтобы помочь вам в управлении завершением работы приложения, Application предоставляет метод Shutdown, свойство ShutdownMode, и события SessionEnding и Exit.
Примечание. |
---|
Shutdown может вызываться только из приложений, имеющих UIPermission. У автономных приложений WPF всегда есть это разрешение. Однако XBAP, выполняющееся в изолированной среде безопасности частичного доверия зоны Интернета, не обладают им. |
Режим завершения работы
Большинство приложений завершают работу при закрытии главного окна или при закрытии всех окон. Иногда, однако, другие условия конкретного приложения могут определить, когда приложение завершает работу. Можно задать условия при которых ваше приложение завершит работу установкой ShutdownMode с помощью одного из следующих перечисленных значений ShutdownMode:
По умолчанию значение ShutdownMode является OnLastWindowClose, которое означает, что приложение автоматически завершает работу при закрытии пользователем последнего окна в приложении. Однако если ваше приложение должно быть завершено при закрытии главного окна, WPF автоматически делает это, если вы установите ShutdownMode в OnMainWindowClose. Это показано в следующем примере.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
ShutdownMode="OnMainWindowClose" />
Когда у вас есть конкретные условия завершения работы приложения, установите ShutdownMode в OnExplicitShutdown. В этом случае ответственность завершить работу приложения, явно вызвав метод Shutdown будет возложена на вас; в противном случае приложение продолжит выполнение, даже если все окна будут закрыты. Обратите внимание на то, что Shutdown вызывается неявно, когда ShutdownMode установлено в OnLastWindowClose или OnMainWindowClose.
Примечание. |
---|
ShutdownMode может быть задано из XBAP, но оно игнорируется;XBAP всегда завершает работу, когда оно уходит из обозревателя или при закрытии обозревателя, на котором размещен XBAP. Дополнительные сведения см. в разделе Общие сведения о переходах. |
Завершение сеанса
Условия завершения работы, которые описаны свойством ShutdownMode являются специфическими для приложения. Хотя, в некоторых случаях, приложение может завершить работу в результате выполнения внешнего условия. Наиболее обычное внешнее условие возникает, когда пользователь завершает сеанс Windows при выполнении следующих действий:
Выход
Завершение работы
Перезапуск
Спящий режим
Чтобы обнаружить, когда завершается сеанс Windows, вы можете обработать событие SessionEnding, как показано в следующем примере.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
SessionEnding="App_SessionEnding" />
using System.Windows; // Application, SessionEndingCancelEventArgs, MessageBox, MessageBoxResult, MessageBoxButton
namespace SDKSample
{
public partial class App : Application
{
void App_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
// Ask the user if they want to allow the session to end
string msg = string.Format("{0}. End session?", e.ReasonSessionEnding);
MessageBoxResult result = MessageBox.Show(msg, "Session Ending", MessageBoxButton.YesNo);
// End session, if specified
if (result == MessageBoxResult.No)
{
e.Cancel = true;
}
}
}
}
В этом примере код проверяет свойство ReasonSessionEnding для определения способа завершения сеанса Windows. Он использует это значение, чтобы отобразить сообщение подтверждения пользователю. Если пользователю не нужно завершать сеанс, код устанавливает Cancel в true, чтобы запретить завершение сеанса Windows.
Примечание. |
---|
SessionEnding не вызывается для XBAP. |
Выход
При завершении работы приложения может возникнуть необходимость выполнить некоторую последнюю обработку, такую как сохранение состояния приложения. В этих ситуациях можно обработать событие Exit.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
Startup="App_Startup"
Exit="App_Exit">
...
</Application>
using System.Windows; // Application, StartupEventArgs
using System.IO; // StreamReader, FileMode
using System.IO.IsolatedStorage; // IsolatedStorageFile, IsolatedStorageFileStream
namespace SDKSample
{
public partial class App : Application
{
string filename = "App.txt";
Полный пример см. в разделе Практическое руководство. Сохранение и восстановление свойств области определения приложения в сеансах приложения.
Exit может обрабатываться автономными приложениями и XBAP. Для XBAP, Exit вызывается в следующих случаях:
XBAP уходит из обозревателя.
В Internet Explorer 7, при закрытии вкладки, на которой размещены XBAP.
При закрытии обозревателя.
Код завершения
Приложения в основном загружаются операционной системой в ответ на запрос пользователя. Однако приложение может быть запущено другим приложением для выполнения некоторой определенной задачи. При завершении работы запущенного приложения, ему может понадобиться выяснить условие, при котором запущенное приложение завершит работу. В этих случаях Windows позволяет приложениям вернуть код выхода приложения при завершении работы. По умолчанию приложения WPF возвращают значение кода выхода равным 0.
Примечание. |
---|
При отладке из Visual Studio, код завершения приложения отображается в окне Вывод, когда приложение завершает работу, в сообщении, которое выглядит следующим образом: The program '[5340] AWPFApp.vshost.exe: Managed' has exited with code 0 (0x0). Выберите в меню Вид пункт Вывод, чтобы открыть окно Вывод. |
Чтобы изменить код выхода, вы можете вызвать перегрузку Shutdown(Int32), которая принимает целочисленный аргумент для кода выхода:
// Shutdown and return a non-default exit code
Application.Current.Shutdown(-1);
Вы можете определить значение кода выхода и изменить его, обработав событие Exit. Обработчик событий Exit передает ExitEventArgs, который обеспечивает доступ к коду выхода со свойством ApplicationExitCode. Дополнительные сведения см. в разделе Exit.
Примечание. |
---|
Вы можете задать код выхода в автономных приложениях и XBAP. Однако значение кода выхода игнорируется для XBAP. |
Необработанные исключения.
Иногда приложение может завершить работу вниз по неправильным условиям, например, когда создается непредвиденное исключение. В этом случае в приложении может не быть кода для обнаружения и обработки исключений. Этот тип исключения является необработанным исключением; уведомление, сходное с показанным на следующем рисунке, отображается перед закрытием приложения.
С точки зрения работы пользователя для приложения лучше всего избежать этого поведения по умолчанию, выполнив некоторое или все из следующего:
Отображение удобных для пользователя данных.
Попытка сохранить выполнение приложения.
Запись подробных, понятных разработчику особых сведений в журнале событий Windows.
Реализация этой поддержки зависит от возможности обнаружить необработанные исключения, при которых возникает событие DispatcherUnhandledException.
<Application
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="MainWindow.xaml"
DispatcherUnhandledException="App_DispatcherUnhandledException" />
using System.Windows; // Application
using System.Windows.Threading; // DispatcherUnhandledExceptionEventArgs
namespace SDKSample
{
public partial class App : Application
{
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// Process unhandled exception
...
// Prevent default unhandled exception processing
e.Handled = true;
}
}
}
Примечание. |
---|
Более подробные примеры обработки DispatcherUnhandledException содержатся в разделе Пример необработанных исключений приложения. |
Обработчик событий DispatcherUnhandledException передает параметр DispatcherUnhandledExceptionEventArgs, содержащий контекстные сведения, касающиеся необработанного исключения, включая исключение самого себя (DispatcherUnhandledExceptionEventArgs.Exception). Можно использовать эту информацию для определения способа обработки исключений.
Когда вы обрабатываете DispatcherUnhandledException, вы должны установить свойство DispatcherUnhandledExceptionEventArgs.Handled в true; в противном случае WPF по-прежнему рассматривает необработанное исключение и возвращается к поведению по умолчанию, описанному выше. Если возникает необработанное исключение и событие DispatcherUnhandledException не обрабатывается, или событие обрабатывается и Handled устанавливается в false, приложение немедленно завершает работу. Кроме того, никакие другие события Application не вызываются. Следовательно, вам необходимо обработать DispatcherUnhandledException, если ваше приложение имеет код, который должен запускаться перед завершением работы приложения.
Хотя приложение может завершить работу в результате выполнения необработанного исключения, приложение обычно завершает работу в ответ на запрос пользователя, как описано в следующем разделе.
События времени жизни приложения
Автономные приложения и XBAP не имеют точно одинакового времени жизни. Следующий рисунок показывает ключевые события времени жизни автономного приложения и отображает последовательность, в которой они создаются.
Аналогично, на следующем рисунке показаны ключевые события во времени жизни XBAP и показана последовательность, в которой они вызываются.
Другие службы приложения
В дополнение к управлению временем жизни приложения Application предоставляет службы, которые включают следующие:
Общие свойства области приложения.
Общие ресурсы области приложения.
Файлы данных ресурсов, содержимого и исходный веб-узел приложения.
Управление окнами
Управление навигацией.
Общие свойства области приложения.
Приложение предоставляет свойство Properties для предоставления состояния, которое может быть совместным по всему приложению. Ниже приведен пример использования Properties:
// Set an application-scope property with a custom type
CustomType customType = new CustomType();
Application.Current.Properties["CustomType"] = customType;
...
// Get an application-scope property
// NOTE: Need to convert since Application.Properties is a dictionary of System.Object
CustomType customType = (CustomType)Application.Current.Properties["CustomType"];
Дополнительную информацию можно найти в следующих статьях:
Общие ресурсы области приложения.
Приложение предоставляет свойство Resources, чтобы позволить разработчикам приложений совместно использовать ресурсы Пользовательский интерфейс. Ниже приведен пример использования Properties:
// Set an application-scope resource
Application.Current.Resources["ApplicationScopeResource"] = Brushes.White;
...
// Get an application-scope resource
Brush whiteBrush = (Brush)Application.Current.Resources["ApplicationScopeResource"];
Дополнительную информацию можно найти в следующих статьях:
Файлы данных ресурсов, содержимого и исходный веб-узел приложения.
Приложения WPF могут управлять несколькими типами файлов данных, отличных от кода, включая файлы ресурсов, файлы содержимого, и файлы исходного узла. Следующие вспомогательные методы могут использоваться для загрузки этих типов файлов данных:
Управление окнами
Application и Window имеют близкую связь. Как вы уже видели, время жизни приложения может зависеть от времени жизни его окон, как указано в свойстве ShutdownMode. Записи Application, которыми окно обозначается как главное окно приложения (Application.MainWindow) и поддерживает список в настоящее время созданных окон (Application.Windows).
Дополнительные сведения см. в разделе Общие сведения об окнах WPF.
Управление навигацией.
Для автономных приложений с навигацией (используя NavigationWindow и Frame) или XBAP, Application обнаруживается любой переход внутри приложения и вызываются соответствующие следующие события:
Кроме того, Application предоставляет возможность для приложений любого типа создавать, сохранять и получать cookies, используя GetCookie и SetCookie
Дополнительные сведения см. в разделе Общие сведения о переходах.
См. также
Основные понятия
Ресурсы, содержимое и файлы данных для приложений Windows Presentation Foundation
Ссылки
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Июль 2008 |
Добавлен раздел об использовании экрана-заставки. |
Изменение функции SP1. |