- •А.А. Волосевич
- •1. ОбщееописаниеWpf
- •2. ПРостейшее ПриложениеWpf
- •4. Базовые концепции wpf Иерархия классов
- •Свойства зависимостейи присоединённые свойства
- •Маршрутизируемыесобытия
- •Многопоточность в wpf
- •5. СтруктуРа Оконного приложения wpf
- •Класс Window
- •КлассApplication
- •6. Компоновка
- •Размер и выравнивание
- •Основные контейнеры компоновки
- •Прокрутка и декорирование содержимого
- •7. Обзор элеменТов управления
- •Цвета и окантовка:
- •Шрифт содержимого:
- •Элементы управления содержимым
- •Списковые элементы управления
- •Прочие элементы управления
- •8. Фигуры
- •9. Цвет,кисти, прозрачность Представление цвета в wpf
- •Лучшие кисти
- •Прозрачность
- •10. Трансформации и эффекты
- •11. Классы drawing иvisual
- •12. Ресурсы
- •Двоичные ресурсы
- •Логические ресурсы
- •13. Привязка данных Базовые концепции привязки данных
- •Практическое использование привязки данных
- •Конвертеры значений
- •Проверка данных
- •14. Стилии триггеры
- •15. ПрИвязкакколлекциямиШаблоныданных
- •16. Представления Данных
- •17. ШАблоны элементов управления
Класс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) – это процесс размещения визуальных элементов на поверхности родительского элемента. Компоновка состоит из двух фаз:
Фаза измерения (measure). В этой фазе родительский контейнер запрашивает желаемый размер у каждого дочернего элемента, которые, в свою очередь, выполняют фазу измерения рекурсивно.
Фаза расстановки (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.