- •А.А. Волосевич
- •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. ШАблоны элементов управления
5. СтруктуРа Оконного приложения wpf
Приложения WPF допускают несколько вариантов организации. Самый распространённый вариант – приложение в виде набора окон.
Класс Window
Технология WPFиспользует для отображения стандартныеокна операционной системы. Отдельное окно представлено классомSystem.Windows.Window. Это элемент управления со свойством содержимого Content. Обычносодержимым окна является контейнер компоновки.
Рассмотрим основные элементы класса Window. Внешний вид окна контролируют свойства Icon, Title (заголовок окна) и WindowStyle (стиль рамки). Начальная позиция окна управляется свойствами Leftи Top или свойством WindowStartupLocationсо значениямиCenterScreen, CenterOwner, Manual. Чтобы окно отображалось поверх всех окон, нужно установить свойство Topmostв true. Свойство ShowInTaskbarуправляет показом окна на панели задач.
<Window x:Class="WpfLayout.MainWindow" Title="Main Window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="230" Width="250" Topmost="True"
WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow">
<!-- содержимое окна -->
</Window>
Чтобы программно показать окно, нужно создать экземпляр окна и вызвать его метод Show()или ShowDialog(). Первый метод отображает немодальное окно. Второй метод обычно применяется для модальных диалоговых окон, так как ожидает закрытия окна и возвращает то значение, которое было установлено свойствуDialogResult. Метод окна Hide()прячет окно, метод Close() – закрывает окно.
MyDialogWindow dialog = newMyDialogWindow();
// отображаем диалог и ждём, пока его не закроют
// у DialogResult типbool?
if (dialog.ShowDialog()==true)
{
// диалогзакрыли, нажавнаOK
}
Класс Window поддерживает отношение владения. Если отношение установлено, дочернее окно минимизируется или закрывается, когда соответствующие операции выполняет его владелец. Чтобы установить отношение, задайте у дочернего окна свойство Owner. Коллекция окна OwnedWindows содержит все дочерние окна (если они есть).
Опишем некоторые события, связанные с окном. Заметим, что класс FrameworkElement определяетсобытия времени существования, генерируемые при инициализации (Initialized), загрузке (Loaded) или выгрузке (Unloaded) элемента1. СобытиеInitialized генерируется после создания элемента и определения его свойств в соответствии с разметкой XAML. Это событие генерируется сначала вложенными элементами, затем их родителями. Событие Loaded возникает после того, как все окно было инициализировано, и были применены стили и привязка данных. Событие Loaded сначала генерирует вмещающее окно, после чего его генерируют остальные вложенные элементы.
При изменении статуса активности окна генерируются события ActivatedиDeactivated. Событие Closing генерируется при попытке закрытия окна и даёт возможность отклонить эту операцию. Если закрытие окна все же происходит, генерируется событие Closed.
Ниже приведён листинг, демонстрирующий работу с некоторыми событиями окна. Обратите внимание – вместо назначения обработчиков событий используется перекрытие виртуальных методов, вызывающих события.
publicpartialclassMainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
protectedoverridevoid OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
if (MessageBox.Show("Do you want to exit?","Exit",
MessageBoxButton.YesNo,
MessageBoxImage.Question)
== MessageBoxResult.No)
{
e.Cancel = true;
}
}
protectedoverridevoid OnClosed(EventArgs e)
{
base.OnClosed(e);
// здесь можно сохранить состояние окна
}
protectedoverridevoid OnInitialized(EventArgs e)
{
base.OnInitialized(e);
// здесь можно восстановить состояние окна
}
}