Окна

Класс Window

Последнее обновление: 21.03.2016

Ключевым элементом в системе графического интерфейса в WPF является окно, которое содержит все необходимые элементы управления. Окно в WPF представлено классом Window, который является производным от класса ContentControl. Поэтому окно является элементом управления содержимым, и как, к примеру, кнопка, может содержать в себе один дочерний элемент. Как правило, в его качестве выступает один из элементов компоновки, например, Grid.

Класс Window привносит ряд свойств, которые позволяют настроить окно приложения:

  • AllowsTransparency: при значении true позволяет установить прозрачный фон окна

  • Icon: представляет иконку, которая отображается в левом верхнем углу окна и в панели задач. Если иконка не установлена, то система будет использовать стандартную иконку по умолчанию.

  • Top: устанавливает отступ окна приложения от верхней границы экрана

  • Left: устанавливает отступ окна приложения от левой границы экрана

  • ResizeMode: задает режим изменения размеров окна. Может принимать следующие значения:

    • CanMinimize: окно можно только свернуть

    • NoResize: у окна нельзя изменить начальные размеры

    • CanResize: у окна можно изменять размеры

    • CanResizeWithGrip: в правом нижнем углу окна появляется визуализация того, что у окна можно изменять размеры

  • RestoreBounds: возвращает границы окна

  • ShowInTaskbar: при значении true иконка окна отображается на панели задач

  • SizeToContent: позволяет автоматически масштабировать размеры окна в зависимости от содержимого. Может принимать следующие значения:

    • Width: автоматически масштабируется только ширина

    • Height: автоматически масштабируется только высота

    • WidthAndHeight: автоматически масштабируются высота и ширина

    • Manual: автоматическое масштабирование отсутствует

  • Title: заголовок окна

  • Topmost: при значении true окно устанавливается поверх других окон приложения

  • WindowStartupLocation: устанавливает стартовую позицию окна. Может принимать следующие значения:

    • CenterOwner: если данное окно было запущено другим окном, то данное окно позиционируется относительно центра запустившего его окна

    • CenterScreen: окно помещается в центре экрана

    • Manual: позиция устанавливается вручную с помощью свойств Top и Left

  • WindowState: состояние окна. Возможные значения:

    • Maximized: раскрыто на весь экран

    • Minimized: свернуто

    • Normal: стандартное состояние

Жизненный цикл

В процессе работы окно в WPF проходит ряд этапов жизненного цикла, которые доступны нам через обработку событий класса Window:

  1. Initialized: это событие возникает при инициализации окна, когда у него устанавливаются все свойства, но до применения к нему стилей и привязки данных. Это общее событие для всех элементов управления в WPF, поэтому следует учитывать, что сначала возникают события вложенных элементов, а затем их контейнеров. То есть событие Initialized окна приложения генерируется только после того, как отработает событие Initialized для всех вложенных элементов.

  2. Loaded: возникает после полной инициализации окна и применения к нему стилей и привязки данных. После генерации этого события происходит визуализация элемента, и окно отображается на экране и становится видимым для пользователя

  3. Closing: возникает при закрытии окна

  4. Closed: возникает, когда окно становится закрытым

  5. Unloaded: возникает после закрытия окна при выгрузке всех связанных ресурсов из памяти

Жизненный цикл окна приложения в WPF

Соответственно, если нам надо выполнить некоторые действия при загрузке или при закрытии окна, мы можем обработать события Loaded и Closing/Closed. Например, запишем в текстовый лог события жизненного цикла:

using System;
using System.Windows;
using System.Windows.Media;
using System.IO;

namespace WindowApp
{
    public partial class MainWindow : Window
    {
        string path = "log.txt";
        public MainWindow()
        {
            InitializeComponent();

            this.Loaded += MainWindow_Loaded;
            this.Closing += MainWindow_Closing;
            this.Closed += MainWindow_Closed;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Log("Loaded");
        }

        private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Log("Closing");
        }

        private void MainWindow_Closed(object sender, EventArgs e)
        {
            Log("Closed");
        }

        private void Log(string eventName)
        {
            using (StreamWriter logger = new StreamWriter(path, true))
            {
                logger.WriteLine(DateTime.Now.ToLongTimeString() + " - " + eventName);
            }
        }
    }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850