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

КлассApplication

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

Window myWin = newWindow();

Application myApp = newApplication();

myApp.Run(myWin);

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

Applicationapp = newApplication();

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

app.Run();

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

<Applicationx: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.