Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Windows Presentation Foundation.docx
Скачиваний:
43
Добавлен:
02.11.2018
Размер:
1.15 Mб
Скачать

Класс Application

Класс System.Windows.Application помогает организовать точку входа для оконного приложения WPF. Этот класс содержит метод Run(), поддерживающий цикл обработки сообщений системы для указанного окна до тех пор, пока окно не будет закрыто:

Window myWin = new Window();

Application myApp = new Application();

myApp.Run(myWin);

Свойство StartupUri класса Application служит для указания главного окна приложения. Если главное окно задано, метод Run() можно вызывать без аргументов:

Application app = new Application();

app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);

app.Run();

При разработке в Visual Studio для каждого оконного приложения WPF создаётся класс, наследуемый от Application, который разделён на XAML-разметку и часть с кодом. Именно в разметке XAML задаётся StartupUri:

<Application x:Class="WpfApplication.App"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

StartupUri="MainWindow.xaml">

<Application.Resources></Application.Resources>

</Application>

Класс Application содержит несколько полезных свойств. При помощи статического свойства Application.Current можно получить ссылку на объект, представляющий приложение. Коллекция Windows содержит все открытые окна приложения. Стартовое окно хранится в свойстве MainWindow (оно доступно для чтения и записи). Свойство ShutdownMode принимает значения из одноимённого перечисления и задаёт условие закрытия приложения. Словарь Properties позволяет хранить произвольную информацию с ключами любого типа. Этот словарь может использоваться для данных, разделяемых между окнами.

События класса Application включают Startup и Exit, Activated и Deactivated, а также событие SessionEnding, генерируемое при выключении компьютера или окончании сессии Windows. События обычно обрабатываются путём перекрытия виртуальных методов, вызывающих их генерацию.

6. Компоновка

В WPF компоновка (layout) – это процесс размещения визуальных элементов на поверхности родительского элемента. Компоновка состоит из двух фаз:

  1. Фаза измерения (measure). В этой фазе родительский контейнер запрашивает желаемый размер у каждого дочернего элемента, которые, в свою очередь, выполняют фазу измерения рекурсивно.

  2. Фаза расстановки (arrange). Родительский контейнер сообщает дочерним элементам их истинные размеры и позицию, в зависимости от выбранного способа компоновки.

Размер и выравнивание

Рассмотрим некоторые свойства элементов WPF, связанные с процессом компоновки. Свойство Visibility, определённое в классе UIElement, управляет видимостью элемента. Это свойство принимает значение из перечисления System.Windows.Visibility:

  • Visible – элемент виден на визуальной поверхности.

  • Collapsed – элемент не виден на визуальной поверхности и не участвует в процессе компоновки.

  • Hidden – элемент не виден на визуальной поверхности, но участвует в процессе компоновки («занимает место»).

В классе FrameworkElement определён набор свойств, ответственных за размер, отступы и выравнивание отдельного элемента (табл. 3).

Таблица 3

Свойства размера, отступа, выравнивания

Имя

Описание

HorizontalAlignment

Определяет позиционирование дочернего элемента внутри кон­тейнера компоновки, если доступно дополнительное пространство по горизонтали. Доступны значения Center, Left, Right, Stretch

VerticalAlignment

Определяет позиционирование дочернего элемента внутри кон­тейнера компоновки, когда доступно дополнительное пространство по вертикали. Доступны значения Center, Top, Bottom или Stretch

Margin

Добавляет пространство вокруг элемента. Margin – это экземпляр структуры System.Windows.Thickness, с отдельными компонентами для верхней, нижней, левой и правой стороны

MinWidth и MinHeight

Устанавливает минимальные размеры элемента. Если элемент слишком велик, он будет усечен

MaxWidth и MaxHeight

Устанавливает максимальные размеры элемента. Если контейнер имеет свободное пространство, элемент не будет увеличен сверх указанных пределов, даже если свойства HorizontalAlignment и VerticalAlignment установлены в Stretch

Width и Height

Явно устанавливают размеры элемента. Эта установка переопределяет значение Stretch для свойств HorizontalAlignment и VerticalAlignment. Однако размер не будет установлен, если выходит за пределы, заданные в MinWidth и MinHeight

В FrameworkElement свойства Width и Height установлены по умолчанию в значение Double.NaN. Это означает, что элемент будет иметь такие размеры, которые нужны для отображения его содержимого. В разметке XAML значению Double.NaN для свойств размера соответствует строка "NaN" или (что более предпочтительно) строка "Auto". Также в классе FrameworkElement определены свойства только для чтения ActualWidth и ActualHeight, содержащие действительные отображаемые размеры элемента после фазы расстановки.

Следующий пример демонстрирует компоновку с элементами, у которых установлены некоторые свойствами размера и позиционирования. Обратите внимание на различные способы установки свойства Margin:

  • Одно значение – одинаковые отступы для всех четырёх сторон;

  • Два значения – отступы для левой/правой и верхней/нижней сторон;

  • Четыре числа – отступы для левой, верхней, правой и нижней стороны1.

<StackPanel>

<Button HorizontalAlignment="Left">Button 1</Button>

<Button HorizontalAlignment="Right">Button 2</Button>

<Button Margin="10" Height="35">Button 3</Button>

<Button Margin="10,5,25,10">Button 4</Button>

<Button Margin="10,20" MaxWidth="70">Button 5</Button>

</StackPanel>

Рис. 4. Использование свойств размера и позиционирования.

В элементах управления, унаследованных от класса Control, определены свойства отступа и выравнивания для дочернего содержимого. За выравнивание отвечают свойства HorizontalContentAlignment и VerticalContentAlignment. Они поддерживают те же значения, что и свойства HorizontalAlignment и VerticalAlignment. Свойство Padding позволяет вставить пустое пространство между краями элемента управления и краями содержимого. Его тип и способ задания аналогичны свойству Margin.