Обновлено: 27.04.2023
Презентация на тему: ” WPF (Windows Presentation Foundation) WPF – новая технология.NET Framework 3.x для создания пользовательских интерфейсов в клиентских приложениях. Одна.” — Транскрипт:
2 Компиляция WPF приложений При компиляции XAML файлы разбираются (parsed) и преобразуются в коды на языке BAML ( Binary Application Markup Language), которые встраиваются как ресурс в исполняемый файл. Код BAML компактнее исходного XAML кода и при выполнении его загрузка выполняется быстрее, чем загрузка XAML файла. При компиляции для каждого XAML файла создается файл с кодом на языке программирования, содержащий частичное (partial) объявление класса для элемента верхнего уровня в файле разметки. В общем случае компиляция XAML файлов осуществляется в два прохода. Сначала компилируются только те XAML файлы, которые не содержат ссылки на локально-определенные типы (т.е. типы, определенные где-нибудь в данном проекте), так как они существуют только в виде исходного кода и еще не были скомпилированы. XAML файлы со ссылками на локально-определенные типы компилируются при втором проходе компилятора. Вся необходимая для работы MSBuild информация об исходных файлах, ссылках на зависимые сборки и конфигурация приложения находится в файлах проекта MSBuild – XML файлах, подчиняющихся MSBuild schema.
3 XML (E X tensible M arkup L anguage ) XML – простой гибкий текстовый формат, который используется как основа для создания языков разметки для публикации документов и обмена данными. Стандарт XML издан в виде рекомендаций консорциума всемирной паутины ( World Wide Web Consortium – W3C) – международной организации, которая занимается технологическими стандартами для всемирной паутины. Документ XML состоит из элементов. Элементы документа могут быть вложенными, но не могут пересекаться. Таким образом, элементы документа образуют дерево. Каждый документ XML должен иметь один и только один корневой элемент. Элементы могут содержать атрибуты, представляющие собой пары имя- значение.
4 Элементы XML Каждый элемент документа должен иметь имя. Имя элемента – это строка символов, которая начинается с подчеркивания или буквы, и состоит только из букв, цифр, символов подчеркивания (underscore), дефисов (hyphen) и точек (period). Имена элементов чувствительны к регистру. Каждый элемент начинается с открывающего тэга и заканчивается закрывающим тэгом. Все, что находится между открывающим и закрывающим тэгом, называется содержимым (content) элемента. Открывающий тэг имеет вид или (для элемента с атрибутами) Закрывающий тэг имеет вид. Элемент может быть пустым. Пустой элемент может содержать атрибуты. Для пустого элемента допустима форма с пустым тэгом (empty tag)
6 Разделы CDATA Все символы, которые находятся между комбинацией символов трактуются XML анализатором как содержимое, не включающее символов разметки. Все остальные данные – это анализируемые символьные данные, которые XML-анализаторы интерпретируют как язык разметки. Подстановочные строки (character references) не работают внутри разделов CDATA. Разделы CDATA не могут быть вложенными. Комментарии Комментарии – любая текстовая информация, размещенная между символами. Комментарии можно разместить внутри пролога документа, в содержимом документа или после документа. Комментарии не могут появиться внутри значений атрибутов документа или внутри тэгов.
7 Атрибуты XML Элемент может иметь атрибуты. Атрибуты состоят из пар имя-значение. Имена атрибутов подчиняются тем же требованиям, что и имена элементов. Атрибуты размещаются в открывающем тэге элемента. Число атрибутов элемента не ограничено. Пустой элемент может содержать атрибуты. Значение атрибута заключается в одинаковые кавычки – простые или двойные. Для разных атрибутов можно использовать разные кавычки. Внутри двойных кавычек можно использовать одинарные без использования ” и наоборот. Атрибуты должны иметь как имя, так и значение. Внутри атрибутов можно использовать entity references и character references, но нельзя использовать разделы CDATA. Порядок определения атрибутов может не сохраняться XML-анализатором. XML-анализаторы не сохраняют число пробелов в значениях атрибутов.
8 Пространства имен XML Чтобы избежать конфликтов при использовании элементов с одинаковыми именами, в документе можно определить пространства имен. Пространство имен определяется с помощью атрибута xmlns c префиксом или без него. Для пространств имен обычно используются URI (Uniform Resource Identifier). URI не обязан ссылаться на реально существующий объект. Пространство имен по умолчанию задается атрибутом xmlns без префикса. Элемент, в котором определено пространство имен по умолчанию, и все его дочерние элементы автоматически относятся к этому пространству имен, если явно не указано другое пространство имен. Объявление пространства имен с префиксом имеет вид xmlns: ИМЯ =URI Имя задает префикс пространства имен. Префикс можно использовать как в том элементе, в котором он определен, так и в его дочерних. Атрибут не помещается автоматически в то же пространство имен, что и содержащий его элемент. Пространство имен действует только в пределах того элемента, атрибутом которого является его декларация.
10 Модель данных документа XML После проверки документа на соответствие XML Schema программа может создать модель данных документа, включающую словарь (названия элементов и атрибутов) ; модель содержания (отношения между элементами и атрибутами и их структура) ; типы данных. Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в памяти объект, соответствующий структуре XML- документа.
12 Пространства имен XAML Два пространства имен – пространство имен XAML и пространство имен WPF – присутствуют во всех WPF документах: Button Click Синтаксический анализатор использует атрибут Class для создания класса, производного от типа, совпадающего именем элемента ( Window в данном примере). Атрибут Class указан с префиксом x:, что означает, что это имя находится в пространстве имен XAML.
Особенности создания приложения Windows Foundation Presentation. Разработка приложения-презентации, оперирующего страницами XAML как “слайдами”. Анализ модификации приложения Windows Foundation Presentation: работа с решением в Expression Blend.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 24.04.2017 |
Размер файла | 2,6 M |
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Лабораторная работа № 9
Создание приложения-презентации Windows Foundation Presentation
Содержание
1. Создание приложения Windows Foundation Presentation
2. Модификация приложения Windows Foundation Presentation
3. Модификация приложения Windows Foundation Presentation: работа с решением в Expression Blend
О приложении к Лабораторной работе № 9
Вводная часть
В предыдущей лабораторной работе данного практикума были рассмотрены основные направления работы с Windows Foundation Presentation и языка разметки XAML.
Стандартные инструменты редактирования элементов управления и формирования разметки для среды разработки хороши, но не более. Специально для иных, более расширенных оформлений и дизайнов создан другой мощнейший инструмент: Microsoft Expression Blend (текущая версия 4).
приложение presentation expression windows
Как показано на рисунке выше, пакет Expresson Studio доступен бесплатно. В пакет включены четыре отдельных приложения (Web, blend, Desing, Encoder), а также набор документации. Другие компоненты кроме Blend на не интересуют (опять же цель данного практикума не ознакомить читателя с работой иных сторонних продуктов, но основы работы в Expression Blend будут изложены в кратком виде).
1. Создание приложения Windows Foundation Presentation
Запускаем Visual Studio 2010, откроется Начальная страница:
Рис. 2. 1. Создание нового проекта
Рис. 2. 2. Окно создания нового проекта
Рис. 2. 3. Вводим данные нового проекта приложения WPF
После нажатия клавиши ОК мы увидим сформированный проект и исходный код приложения WPF (не пустого изначально). Среда разработки сформировала исходный код в двух файлах (не считая стандартного AssemblyInfo.cs). Один из файлов отвечает за программу в целом (это файл App.xaml.cs), а второй за формирование окна приложения — инициализацию конструктора формы и всех её элементов (это файл MainWindow.xaml.cs). Как видим, исходный код, например файла App.xaml.cs не отличается от шаблонного:
Получить начальные знания об архитектуре WPF, подходах к проектированию интерфейса приложений, освоить назначение и декларативное описание элементов контроля, объектных ресурсов, стилей и шаблонов.
Введение в WPF
Windows Presentation Foundation ( WPF ) — система для построения клиентских Windows приложений для технологии Microsoft. NET с визуально привлекательными возможностями взаимодействия с пользователем. С помощью WPF можно создавать широкий спектр как автономных, так и размещенных в браузере приложений [ 12 ] .
В основе WPF лежит векторная система визуализации, не зависящая от разрешения и созданная с расчетом на возможности современного графического оборудования. WPF предоставляет средства для создания визуального интерфейса, включая язык XAML , элементы управления , привязку данных , макеты, двухмерную и трехмерную графику, анимацию, стили, шаблоны, документы , текст, мультимедиа и оформление.
Графической технологией, лежащей в основе WPF, является DirectX , в отличие от Windows Forms, где используется GDI / GDI + [ 4 ] . Производительность WPF выше, чем у GDI + за счёт использования аппаратного ускорения графики через DirectX .
WPF обеспечивает интерфейс пользователя высокого уровня и предоставляет следующие возможности:
- веб-подобную модель компоновки, которая обеспечивает размещение и упорядочивание элементов управления по их содержимому;
- многофункциональную модель рисования на базе графических примитивов (базовых форм, текстовых блоков, графических ингредиентов);
- модель с форматированным текстом, которая обеспечивает отображение форматированного стилизованного текста в любой части пользовательского интерфейса, комбинирования текста со списками, рисунками и другими интерфейсными элементами;
- задание анимации с помощью декларативных дескрипторов;
- поддержка аудиовизуальной среды для проигрывания любых аудио- и видеофайлов;
- стили и шаблоны, которые позволяют стандартизировать форматирование и управление визуализацией элементов управления, а также повторно использовать эти решения в различных местах проекта;
- команды, которые позволяют определять их в одном месте и многократно связывать с различными элементами управления в приложении;
- декларативный пользовательский интерфейс, который позволяет описывать содержимое окон или страниц с помощью языка XAML.
Основные компоненты архитектуры WPF приведены на рис. 2.1.
Компонент PresentationFramework содержит типы WPF верхнего уровня, включая представление окна, панелей и других элементов управления. PresentationCore содержит базовые типы, такие как UIElement и Visual, от которых порождаются все формы и элементы управления . WindowsBase включает различные типы, которые могут использоваться за пределами WPF, в частности, компоненты DispatchObject и DependencyObject. Компонент milcore является ядром визуализации WPF. WindowsCodecs представляет собой низкоуровневый API – интерфейс для поддержки создания изображений. Direct 3D также является низкоуровневым API -интерфейсом, через который осуществляется визуализация всей графики в WPF. User32 используется для определения, какая программа получает тот или иной участок экрана.
Архитектура WPF определяет основные пространства имен для иерархии классов . Базовый набор элементов управления WPF определяет ключевые иерархии классов системы ( рис. 2.2). На рис. 2.2 абстрактные классы изображены овалами, а конкретные классы – прямоугольниками.
Классы WPF получают поддержку свойств зависимости за счет порождения от класса DependencyObject.
Класс Visual является единичным объектом, который инкапсулирует инструкции и подробности, а также базовую функциональность рисования. Интерфейсные элементы WPF для визуализации должны порождаться, в конечном счете, от класса Visual.
Все пользовательские элементы управления являются потомками классов UIElement или FrameworkElement. Класс UIElement поддерживает такую функциональность как компоновка , ввод, фокус и события. Класс FrameworkElement добавляет к функциональности UIElement задание полей, выравнивание, поддержку связывания данных, анимацию и стили.
Класс Shape является базовым для построения таких геометрических форм как прямоугольник , эллипс , многоугольник, линия и путь .
Класс Control определяет элементы управления , которые могут взаимодействовать с пользователем. Это кнопки, списки, текстовые элементы.
Классы ContentControl и ItemsControl являются базовыми для элементов управления, которые могут иметь содержание единственное или коллекцию соответственно.
Класс Panel является базовым для всех контейнеров компоновки – элементов, которые могут содержать один или большее число дочерних элементов.
Нововведения в WPF 4
Я напишу отдельную статью, которая опишет важные изменения, которые грядут в WPF и Silverlight конструкторах в VS 2010.
Элементы управления
Элементы управления для построения богатых приложений
WPF 4 добавляет разнообразные элементы управления, чтобы создавать бизнес-приложения еще быстрее и проще. Новый, богатый набор элементов управления включает такие LOB-необходимые элементы управления, как DataGrid, DatePicker и Calendar. Данные новые элементы управления на 99% поведенчески и API совместимые с их Silverlight аналогами, позволяя разработчику создавать совместимые веб- и клиентские приложения, оптимизируя технологический процесс благодаря повторному использованию Silverlight и WPF кода.
Хитрые приёмы
Windows 7 и элемент управления Office Ribbon
Новый WPF элемент управления Ribbon будет доступен, почти сразу, после релиза WPF 4. Он поддерживает все стандартные возможности, с которыми знаком конечный пользователь: закладки и группы, динамическое изменение размеров, панель быстрого доступа, меню приложения, закладками, зависящими от контекста, горячими клавишами и многое другое.
WPF версия Ribbon будет обладать полноценной расширяемостью для соответствия изменениям в руководстве в следующих релизах. Ограниченная CTP версия доступна уже сегодня.
Графика
Поддержка третьих пиксельных шейдеров
WPF основан на поддержке популярного ShaderEffect, впервые представленного в WPF 3.5 SP1, который позволяет создавать эффекты, используя пиксельные шейдеры 3-ей версии. PS 3.0 более сложный, чем PS 2.0, что дает возможность создавать неотразимые эффекты на поддерживаемом оборудовании.
LayoutRounding
WPF 4 переняла свойство UseLayoutRounding, представленное в Silverlight 2. Движок макета зачастую рассчитывает подпиксельные координаты расположения. Это приводит к артефактам при прорисовке, когда элемент расположен на стыке подпиксельных границ и сглажен над несколькими физическими пикселями.
UseLayoutRounding заставит движок макета располагать элементы по всем границам пикселя, следовательно, убирая большинство артефактов прорисовки, вызванной данной проблемой, что позволяет создавать чистый и чёткий UI по умолчанию.
CleartypeHint
Новое добавленное свойство CleartypeHint позволяет разработчикам приложений включить высококачественную прорисовку Cleartype текста, когда во многих ситуациях он был заранее отключен. Такие ситуации включают в себя текст в наслоившихся окнах, текст в VisualBrush, DrawingBrush, BitmapCacheBrush и везде, где представление промежуточной прорисовки будет предыдущим результатом в черно-белом тексте.
Текстовый стек
Новый стек для прорисовки текста
WPF стек для прорисовки текста был полностью заменен, изменение, которое приводит к существенным усовершенствованиям в чёткости прорисовки текста, способности к изменению настроек и поддержки международных языков. Данный новый текстовый стек поддерживает оптимизированный символьный слой, чтобы показывать текст с сопоставимой резкостью текста в Win32/GDI:
Так же новый стек поддерживает явно выбираемые режимы прорисовки текста: aliased, grayscale, ClearType.
Новый текстовый стек позволяет оптимизировать текстовую привязку для анимации и статики. Вдобавок, новый текстовый стек поддерживает шрифты с встроенными картами изображений, что позволяет многим восточно-азиатским шрифтам прорисовываться с чёткостью, к которой привыкли пользователи Win32.
BindableRun
С выпуском WPF, Run.Text был простым CLR-свойством. Это значит, что Run.Text испытывает недостаток во всех преимуществах системы зависимостей свойств в WPF, самое значительное из которых — привязка. В WPF 4 мы конвертировали Run.Text в зависимое свойство, позволяющее разработчикам впервые использовать, привязанный к данным, Run. Больше информации об этом тут.
Собственные словари
WPF включает в себя проверку орфографии, которая до 4-ой версии использовала словари предоставляемые ОС. Это было большой проблемой для приложений, которые используют специфическую терминологию, данные приложения надоедали постоянными уведомлениями о неправильном написании. WPF 4 представляет API, которое позволяет приложениям добавлять слова в словари, используемые WPF для проверки орфографии. Более подробно об этом тут.
Кисть выделения и каретки
В порыве разрешить разработчикам настраивать богатый вид WPF приложений, теперь вы можете изменить кисть для выделения текста и каретки через два простых свойства — SelectionBrush и CaretBrush:
Windows 7
- Мультитач события Manipulation, Inertia (Pan, Zoom, Rotate) над UIElement
- Простые мультитач события (Up, Move, Down) над UIElement, UIElement3D и ContentElement
- Захват нескольких элементов управления
- Поддержка мультитач в ScrollViewer
- Расширяемость сенсорных устройств
- Совместимость с Surface SDK в будущем
Интеграция c Windows 7 интерфейсом
WPF 4 предоставляет новый и ключевой функционал в Windows 7 для WPF разработчиков. Новая панель задач захламлена и может передавать больше информации. Aero-пиктограммы поддерживают пользовательские команды. Jump List обеспечиваетт доступ к контекстуальному запуску задач и файлов для приложения.
- Задачи
- Элементы
- Список недавно открытых и часто используемых элементов
- Собственные категории
- Индикатор прогресса
- Иконки наложения
- Кнопки с миниатюрами с поддержкой команд
- Текст описания для миниатюр в менеджере окон
Иконка наложения (Icon Overlays)
Иконка наложения позволяет приложению выводить определённые уведомления и состояние пользователю через собственную кнопку в панели задач, отображая небольшое наложение, которое появляется в нижнем правом углу кнопки.
Индикатор прогресса
Кнопка в панели задача может быть использована для отображения простой информации о прогрессе, избавляю пользователя в нужде открывать окно для просмотра состояния. Индикатор прогресса может быть использован для отслеживания процесса копирования файлов, загрузки, инсталляции, записи данных на диск или другой операции, которая занимает определенный отрезок времени.
Панели миниатюр (Thumbnail Toolbars)
Панели миниатюр предоставляют доступ к ключевым команд для приложения без надобности пользователю активировать или разворачивать окно приложения. Данный функционал позволяет разработчикам приложений встраивать элементы управления приложением непосредственно в миниатюру предпросмотра окна. Приложение может включать, отключать или скрывать кнопки с панели миниатюры в зависимости от текущего состояния.
Основы WPF
Новый движок XAML/BAML парсера
В WPF 4 был заменена реализация XamlReader.Load(), BAML-загрузка, функциональность Control & DataTemplate новым движком построенным на основе нового System.Xaml.dll. Как часть стараний, мы исправили много ошибок и добавили много новых функциональных улучшений. Пользователи XamlReader.Load() могут воспользоваться несколькими новыми особенностями языка в XAML2009, такие как поддержка генерик-типов. MarkupExtensions и TypeConverters могут уже сейчас получать доступ к многим сервисам через создания объектного графа, позволяя выполнять больше сценариев, как доступ к Root-объекту. Будет еще проще создать инструменты для анализа и манипулирования XAML с новыми низкоуровневыми API, предоставляемые в System.Xaml.dll.
Поддержка привязки данных для DLR
Данная функциональность расширяет движок привязки данных в WPF для указания существующим свойствам и индексаторам синтаксис обращения к привязанным данным, для поддержки доступа к динамическим членам предлагаемого IDynamicMetaObjectProvider.
Visual State Manager (VSM)
Другая новая функциональность поддерживает WPF-Silverlight континуум в VisualStateManager, который представляет новый простой способ применять визуальные состояния элементов управления. Механизм позволяет настроить вид и поведение элемента управления, предоставляя средство указания управляющей логики к его соответствующему началу и концу визуальных состояний.
VSM является очень гибким в генерировании анимации перехода в соответствующие состояния, следовательно автор элемента управления тратит меньше времени на написание кода и больше времени на его вид. Это означает, что VSM может дать автору элемента управления возможность легко изменять поведение и вид элементов управления, а также изменять визуальный ответ элемента управления на пользовательское действие. Все это полностью поддерживается в Expression Blend.
HTML-XBAP Script Interop
WPF 4 обеспечивает средства для прямого общения между XBAP и скриптами в размещенной HTML странице (где XBAP загружен в HTML фрейм или элемент IFRAME). XBAP может получить глубокий доступ в HTML DOM, включая ActiveX элементы управления, встроенные в содержащей HTML странице, а также обрабатывать события DOM.
WPF открывает главный объект скрипта в размещаемом фрейме. Это динамический объект, который представляет объект окна фрейма, а также любые функции или глобальные переменные в скрипте на HTML странице. Из него, приложение может вызывать функции скрипта напрямую или обращаться к HTML DOM. Данная функциональность доступна в partial-trust XBAP и во всех поддерживаемых версиях Internet Explorer и Firefox.
Виртуализация UIAutomation
WPF представил виртуализированне элементы управления в предыдущих версиях. Тем не менее, не было стандартизированного способа для клиента автоматизации взаимодействия с виртуализированным элементом управления. В WPF 4 было добавлено два новых шаблона для элементов управления — ItemsContainerPattern и VirtualizedItemPattern, для поддержки доступа и взаимодействия с виртуализированными элементами. ItemsContainerPattern используется для получения доступа к виртуализированным элементам управления и для поиска виртуализированного элемента, а VirtualizedItemPattern для реализации виртуализированных элементов.
Шаблон SynchronizedInput
Это еще один UIA шаблон проектирования элемента управления, добавленные в WPF 4. Данный шаблон используется клиентами автоматизации, чтобы отслеживать направление заданных событий ввода в корректный элемент WPF фреймворком. Данный шаблон имеет три события автоматизации: InputReachedTargetEvent, InputReachedOtherElementEvent и InputDiscardedEvent, чтобы сообщать, обработан ли ввод.
Развертывание
Тоже самое диалоговое окно вы увидите при создании “Setup and Deployment” проекта (“Add New Project”/“Other Project Types”). NET4 Client Profile выделен в списке по умолчанию.
Full trust развертывание XBAP приложений
Читайте также:
- Информационные агентства цели и задачи деятельности реферат
- Субъекты и объекты связей с общественностью реферат
- К научному стилю речи не относится а реферат б конспект в рассказ г аннотация
- Лечение хронических гепатитов реферат
- Суицид и как с ним бороться реферат
Государственное образовательное
учреждение
высшего профессионального
образования Тюменской области
«ТЮМЕНСКАЯ ГОСУДАРСТВЕННАЯ
АКАДЕМИЯ
МИРОВОЙ ЭКОНОМИКИ, УПРАВЛЕНИЯ
И ПРАВА»
Факультет управления
Кафедра математики, информатики
и естественных наук
Курсовая работа
на тему:
«Windows
Presentation Foundation»
Выполнил:
студент 471 гр.
Куничник Д.С.
Проверил:
Захаров С.Д.
Тюмень 2010
Введение 3
1.Основные
понятия WPF. 5
1.1 Особенности
платформы .NET 5
1.3 WPF:
высокоуровневый API 7
1.4 Разработка
с использованием WPF 8
2.
Разработка WPF-приложения «Словарь» 9
2.1Технические
задачи 9
2.2 Создание
дизайна 10
2.3 Создание
базы данных и подключение к ней 16
2.4 Кодовая
реализация 17
Заключение 19
Список
использованной литературы 20
Приложение
1 21
Листинг
Web-страницы Defulat.aspx 21
Приложение
2 28
Листинг
программы Default.aspx.cs 28
Введение
Несмотря на быстрое развитие
Интернета и связанных с ним технологий,
Web-приложения
ещё долгое время не смогут вытеснить
Windows-приложения
из-за достаточно большого количества
ограничений. Поэтому актуальность
разработки Windows-приложений
не вызывает вопросов.
Microsoft
не перестает выпускать всё новые и новые
версии операционной системы и средств
разработки для неё. Если когда-то создание
калькулятора занимало многие часы, то
с появлением Windows
Forms,
а затем и платформы .NET
все изменилось.
Несмотря на то что Windows Forms является
зрелым и полнофункциональным
инструментальным средством, оно жестко
связано с основными конструктивными
особенностями Windows, которые не меняются
на протяжении последних десяти лет.
Более того, Windows Forms основывается на
интерфейсе Windows API при создании внешнего
вида стандартных элементов пользовательского
интерфейса, таких как кнопки, текстовые
окна, флажки и т.п. Как результат, эти
ингредиенты, по сути, не поддаются
настройке. Например, чтобы создать
элегантную кнопку, нужно построить
специальный элемент управления и
раскрасить каждую частицу кнопки (во
всех ее разных состояниях) с помощью
низкоуровневой модели рисования. Более
того, обычные окна делятся на разные
области, в каждой из которых имеются
свои элементы управления.
В результате нет хорошего способа
рисования в отдельном элементе управления
(например, эффекта свечения ниже кнопки),
чтобы при этом не затронуть областей,
которыми владеют другие элементы. И
даже не думайте об анимационных эффектах,
таких как вращающийся текст, мерцающие
окна или живые окна предварительного
просмотра, поскольку вам придется
рисовать каждую деталь вручную.
Все поменялось благодаря новой
модели с совершенно другой структурой,
которую предлагает Windows
Presentation
Foundation
(WPF).
Несмотря на то, что WPF включает уже
знакомые стандартные элементы управления,
она сама рисует каждый текст, рамку и
фон. Как результат, WPF может предложить
гораздо больше мощных функций. Итак,
Объект
курсовой
работы:
Windows Presentation Foundation.
Предмет работы:
разработка Windows-приложений.
Цель: разработать
Windows-приложение,
основанный на технологии WPF
Задачи, решение
которых необходимо для достижения
поставленной цели:
-
Рассмотреть платформу .NET.
-
Изучить основы .NET.
-
Изучить основы WPF.
-
Разработать приложение «Словарь»,
использующее возможности WPF.
Актуальность данной
работы заключается в том, что Windows
является самой распространенной
операционной системой и рынок
Windows-приложений
остается перспективным.
-
Основные понятия WPF.
1.1 Особенности платформы .NET
WPF
входит в состав платформы .NET,
поэтому описание стоит начать именно
с неё.
Корпорацией Microsoft предложен
новаторский компонентно-ориентированный
подход к программированию, который
является развитием объектно-ориентированного
направления. Согласно этому
подходу, интеграцияобъектов
(возможно, гетерогенной природы)
производится на основе интерфейсов,
представляющих эти объекты (или фрагменты
программ) как независимые компоненты.
Такой подход существенно облегчает
написание и взаимодействие программных компонент
в среде проектирования и реализации.
Стандартизируется хранение и повторное
использование компонент программного
проекта в условиях распределенной
сетевой среды вычислений, где различные
компьютеры и пользователи обмениваются
информацией, например, взаимодействуя
в рамках исследовательского или
бизнес-проекта.
Существенным
преимуществом следует считать и
возможность практической реализации
принципа “всякая сущность является
объектом” в гетерогенной программной
среде. Во многом это стало возможным
благодаря усовершенствованной, обобщенной
системе типизации Common Type System, или
CTS, которая будет подробнее рассмотрена
в одной из следующих лекций.
Строгая
иерархичность организации пространств
для типов, классов и имен сущностей
программы позволяет стандартизировать
и унифицировать реализацию.
Новый
подход к интеграции компонент приложений
в среде вычислений Internet (или так
называемые веб-сервисы) дает возможность
ускоренного создания приложений для
широкого круга пользователей.
Универсальный интерфейс .NET
Framework обеспечивает интегрированное
проектирование и реализациюкомпонентов приложений,
разработанных согласно различным
подходам к программированию.
Говоря о
.NET как о технологической платформе,
нельзя не отметить тот факт, что она
обеспечивает одновременную поддержку
проектирования и реализации программного
обеспечения с использованием различных
языков программирования. При этом
поддерживаются десятки языков
программирования, начиная от самых
первых (в частности, COBOL и FORTRAN) и заканчивая
современными (например, C# и Visual Basic).
Ранние языки программирования до сих
пор активно используются, в частности,
для обеспечения совместимости с ранее
созданными приложениями, критичными
для бизнеса.
1.3 WPF: высокоуровневый API
Если бы единственным достоинством
WPF было аппаратное ускорение через
DirectX, это уже было бы значительным
усовершенствованием, хотя и не
революционным. Однако WPF на самом деле
включает целый набор высокоуровневых
служб, ориентированных на прикладных
программистов.
Ниже приведен список некоторых
наиболее существенных изменений, которые
принес с собой WPF в мир программирования
Windows:
-
Web-подобная модель компоновки.
Вместо того чтобы фиксировать элементы
управления на месте с определенными
координатами. WPF поддерживает гибкий
поток, размещающий элементы управления
на основе их содержимого. В результате
получается пользовательский интерфейс,
который может быть адаптирован для
отображения высокодинамичного
содержимого или разных языков. -
Богатая модель рисования. Вместо
рисования пикселей в WPF мы имеем дело
с примитивами— базовыми фигурами,
блоками текста и прочими графическими
ингредиентами. Также имеются такие
новые средства, как действительно
прозрачные элементы управления,
возможность складывать множество
уровней с разной степенью прозрачности,
а также встроенную поддержку трехмерной
графики. -
Богатая текстовая модель
-
Анимация как первоклассная
программная концепция. Можно использовать
таймер для того, чтобы заставить форму
перерисовать себя. Но в WPF анимация —
неотъемлемая часть программного
каркаса. Анимация определяется
декларативно. -
Поддержка аудио и видео. WPF
включает поддержку воспроизведения
любого аудио- или видеофайла,
поддерживаемого Windows Media Player, позволяя
воспроизводить более одного медиафайла
одновременно. -
Стили и шаблоны.
1.4 Разработка с использованием WPF
Разумеется, XAML
можно писать вручную, но это достаточно
сложно, поэтому в большинстве случаев
дизайнеры пользуются Expression
Blend
и только в случае необходимости
нестандартных решений, добавляют код
вручную. Если открыть Visual
Studio
и создать новое WPF
приложение, то будет автоматически
сгенерирован код, включающий всего два
элемента: окно Window
и поле Grid
(«решетка»), на который можно поместить
элементы управления. При этом может
существовать только один элемент
верхнего уровня. И каждый элемент
является контейнером. Таким образом,
образуется иерархия. (Рис.1)
Рис. 1
Внутри дескрипторов помещаются
атрибуты и свойства, такие как имя
класса, стартовые высота и ширина. Стоит
отметить, что 300 единиц обозначают
специальную единицу измерения, которая
представляет собой 196 дюйма экрана.
Таким образом решается проблема с
различными разрешениями и форматами и
приложение будет адекватно работать
практически при любых условиях.
В связи с особенностями оформления
XAML
кода, некоторые символы (при написании
кода вручную) нужно заменять на специальные
коды, аналогичные кодам в HTML.
Например, если мы попытаемся задать
кнопке текст «<Click
me>»,
то компилятор будет думать, что мы
создаем объект «Click»
с свойством me.
То есть, вместо «<» нужно использовать
«<»
и т.д.
2. Разработка WPF-приложения
«Словарь»
-
Технические задачи
-
Разработать дизайн приложения.
-
Реализовать озвучку слов.
-
Создать подключение к базе
данных на основе . -
Осуществить:
-
создание словарной базы данных
-
наполнение базы данных;
-
поиск по базе данных;
-
интерактивный дизайн;
-
анимацию части действий;
-
реализовать прозрачность окна
и элементов словаря; -
использование drag
and drop; -
реализовать озвучку слов как
встроенным синтезатором, так и
воспроизведением из базы данных.
-
Провести тестирование и
исправление обнаруженных ошибок.
2.2 Создание дизайна
В качестве средства разработки
внешнего вида приложения будет
использоваться Microsoft
Expression
Blend
3. Основная идея приложения – в удобстве.
Во-первых, когда на окно приложения не
будет наведен курсов, оно должно будет
уменьшаться до маленького квадрата, не
закрывающего рабочую область пользователя.
Во-вторых, будет достаточно высокая
степень прозрачности, что также сделает
пользование словарем при чтении текстов
удобным. В-третьих, окно должно будет
всегда в режиме «Always
on
top»
– пользователю не придется постоянно
сворачивать и разворачивать окна.
Первое, что нужно сделать –
создать WPF
проект. Для этого нужно нажать на
Project-New
project
(Рис.2).
Рис. 2
Далее, появится окно ввода
названия проекта. Назовем его «Dictionary»,
выберем «WPF
Application»,
язык – C#
и нажмем «Ok».
(Рис.3)
Выделим основное окно и изменим
его размер,- ширина будет равняться 368
единицам измерения и высота – 364. Как
уже отмечалось ранее, единицы измерения
показывают размер экрана, а не количество
точек, выбранный размер окна будет
заметно больше размера рабочей области.
Это было сделано для создания небольшой
дополнительной прозрачной зоны вокруг
самого словаря, которая будет отслеживать
движения курсора мыши.
Поменяем цвет фона и границ
фона. Выберем для Background
и Border
Brush
любой цвет и поменяем Alpha
(прозрачность) на 0. Также нужно нажать
«Allow
Transparency».
Далее,- изменить Opacity
до 94%. (Рис.4)
Рис. 4
Далее мы будем создавать зону
отображения. Для этого выберем LayoutRoot
и поменяем его свойства. Во-первых
перетащим его мышкой в середину и
поставим «замки» по правому нижниму
углу. Выберем ширину равной 247, и высоту
равной 324. Начнем создание элементов
управления.
По задумке, неактивное окно
будет свернуто до небольшой полупрозрачной
кнопки. Для этого из вкладки Assets
перетащим элемент управления Button.
Внешний вид кнопки не соответствует
желаемому, поэтому нажмем правой кнопкой
мыши и выберем «Edit
template»,
в результате чего будет создано копия
кнопки. Удалим из неё все объекты кроме
корневого – LayoutRoot.
Добавим Rectangle
(прямоугольник), выберем салатовый цвет
и Opacity
равной 71%. Создадим ещё один Rectangle,
зададим ему белый цвет, Opacity
на уровне 20%, RadiusX
и RadiusY
равными 1.75 – что создаст белый, едва
заметный прямоугольник с закругленными
углами, имитирующий отливание света от
большого зеленого прямоугольника.
Последнее, что нужно для нашей кнопки
– красивая буква «D»,
– поместим TextBox,
выберем шрифт Cruiz
MT
и размер 24 pt.
В результате получится красивый элемент
управления, показанный на рисунке 5.
Рис. 5
Для предания большей интерактивности,
можно встроить анимацию, которая будет
воспроизводиться при наведении мыши.
Для этого нажмем F6,
что переведет Blend
в режим «Анимация». Создадим новый
триггер, который будет запускаться при
наведении мыши – MouseEnter
и добавим к нему анимацию. Для этого
выделим букву D,
добавим кадр на 0.5 секунде анимации и
изменим цвет на белый. Добавим ещё один
кадр на 1 секунде и поменяем цвет обратно
на черный. Создадим ещё один триггер –
MouseLeave,
в списке выберем созданную анимацию и
действие – «Remove»
(Рис. 6).
Таким образом, кнопка получила
законченный вид: при наведении курсора
будет включаться анимация в виде
мерцающий буквы D.
Рис. 6.
Аналогично создадим ещё одну
кнопку, которая будет запускать
озвучивание просматриваемого слова.
Также будет запускаться анимация при
наведении курсора. (Рис.7)
Рис. 7
Теперь добавим TextBox,
ListBox,
RichTextBox,
которые будут использованы соответственно
для ввода нужного слова; вывода списка
слов, начинающихся на введенное; и
отображение словарной статьи. (Рис.8)
На этом создание внешнего вида
приложения закончено.
сайта используется Visual
Web
Developer
2008 (Express
Edition).
Создаем новый проект, для этого находим
пункт меню File/New
Web
Site.
В появившемся окне New
Web
Site
выбираем
Web
Site.
Далее определяем путь, где будет храниться
наш сайт, а также язык программирования
– Visual
C#
и нажимаем Ok.
(Рис.1)
Рис.1
Теперь можно приступить к
разработке Web-дизайна.
Нажимаем кнопку Split
для того, чтобы разделить экран на две
части и видеть как код сайта, так и его
внешний вид (используем концепцию
WYSIWYG).
В результате мы увидим следующее (Рис.2):
Рис.2
Для создания каркаса сайта мы
будем использовать стандартные HTML
таблицы. Чтобы её добавить, можно как
написать соответствующий HTML-код
вручную в верхней части (Source),
так и вставить её из панели инструментов
Toolbox
используя Design.
Мы воспользуемся вторым способом.
(Рис.3)
Рис.3
Далее мы редактируем таблицу
так, как если бы мы работали с таблицами
в Microsoft Word.
Удаляем третью лишнюю строку, выделив
её и нажав Del. Объединяем
две первых ячейки верхней строки:
выделяем их, нажимаем на них правой
кнопкой мыши и выбираем ModifyMerge
Cells. В результате у нас
получится следующее: (Рис.4)
Рис.4
Настраиваем размеры и цвета
каждой отдельной ячейки используя CSS
(каскадные таблицы стиля). Для этого
находим нужную нам ячейку, в панели
Properties выбираем Style
и нажимаем на троеточие, справа от этого
свойства. (Рис.5)
Рис.5
В появившемся далее окне выбираем
нужные нам атрибуты для каждой из ячеек.
Так у самой первой ячейки выбираем шрифт
Verdana, размер 16pt. Для всей верхней строки
таблицы определяем цвет #00ccff, высота –
22px, вертикальное
выравненивание – middle.
Для ячеек нижней строки определяем
вертикальное выравнивание top,
ширина ячеек – 20%, 60%, 20% соответственно.
(Рис.6)
Рис.6
В результате, у нас получится
следующее. (Рис.7):
Рис.7
Теперь осталось добавить
компоненты WebPartManager
and WebPartZone, позволяющие делать интерфейс
сайта настраиваемым (наподобие сайта
).
Сначала нужно добавить компонент
WebPartManager, который будет
работать со всеми зонами сайта. Он также
управляет персонализацией страницы.
Чтобы его добавить, нужно в любом месте
внутри тега <form> написать
<asp:WebPartManager runat=”server” ID=”MyPartManager”
/>.
Теперь нужно добавить Web-part
зоны в соответствующие ячейки. Можно
воспользоваться панелью Toolbox
(Рис.8), либо вставлять их вручную.
Рис.8
Так в левую нижнюю ячейку таблицы
мы вставляем компонент CatalogZone,
который будет отображать все доступные
в данный момент зоны. В среднюю и правую
зоны вставляем простые объекты
WebPartZone. (Рис.9)
Рис.9
Зоны являются простыми контейнерами,
а значит с ними можно работать также,
как и с ячейками таблицы. Следующим
элементом дизайна будет являться
календарь. (Рис.10)
Рис.10
Простым перетаскиванием добавляем
его в правую зону (HelpZone).
2.3 Создание базы данных и подключение
к ней
Для работы с базой данных мы
будем использовать Microsoft SQL Server. Так, как
сайт находится на локальной машине,
выберем Database File.
В качестве имени используем MYDATABASE.MDF.
(Рис.11)
Рис.11
При помощи встроенного в IDE
редактора баз данных создадим простую
таблицу groupmates и наполним
начальными данными. Столбцам year
и phone разрешим оставаться
пустыми (Allow Nulls).
(Рис.12)
Рис.12
Теперь из окна DataBase
Explorer перетаскиваем таблицу
groupmates на зону MainZone.
(Рис.13) Visual Web
Developer автоматически
создаст объект SqlDataSource,
сгенерирует нужную строку подключения
и строку команд. Он также автоматически
создаст экземпляр компонента GridView
и привяжет его к SqlDataSource.
Но в версии без SP1 есть
баг, который заключается в неправильном
привязывании GridView к
SqlDataSource. Чтобы заставить
приложение работать, нужно вырезать
отвечающую за SqlDataSource
часть кода и вставить её в конец страницы.
Рис.13
Для реализации возможности
добавления, изменения и удаления данных
в среднюю зону добавим компонент
ListView. Для автоматической
настройки компонента, нажмем Configure
Data Source.
Нажимаем Next и в уже знакомом
нам окне находим кнопку Advanced,
поставим галочку у первого поля выбора.
(Рис.14)
Рис.14
В левую зону вставляем объект
PageCatalogPart. Для каждой из
зон делаем автоформатирование. Для
этого нужно выбрать зону и справа от
неё появится так называемый умный тэг.
(Рис.15)
Рис.15
Теперь наша страница уже начинает
напоминать www.msn.com
(Рис.16). Добавим ещё одну строку таблицы
в конце, она будет играть роль footer’а
и содержать лишь одну ячейку. Кроме
того, в левую нижнюю ячейку нужно вставить
объект EditorZone, который
дает ещё большую гибкость настройки.
Последнее, что стоит сделать – это
добавить компонент Menu во вторую ячейку
первой строки таблицы и добавить
обработчик OnMenuItemClick=”PartsMenu_MenuItemClick”.
Рис.16
2.4 Кодовая реализация
Начнем с реализации конвертера.
Для этого в правую зону напишем следующий
код:
Теперь перейдем непосредственно
к реализации алгоритма конвертации
валют. Для этого два раза кликаем на
кнопку Button1 и Visual
Web Developer
направит нас на метод-обработчик события
Button_Click1.
Внутри него мы пишем следующий код:
Так как пользователь может ввести
практически любые данные в текстовое
поле, я использовал конструкцию
try…catch. В
случае каких-либо ошибок (например,
ввода букв или слишком большого числа)
метод выведет ошибку в окне, но не
остановит работу приложения.
Курсы валют я записал непосредственно
в список опций компонента DropDownList.
Это значит, что к ним можно обратиться
просто использовав свойство Value,
которое возвращает текстовые данные.
Но нам нужно перемножить числа. Поэтому
была использована функция Parse
класса Decimal
Созданное нами в верхней правой
ячейке таблицы меню является пустым.
Нам нужно наполнить его имеющимися
опциями выбора отображения содержимого
Web-зон. Для этого добавим
следующий код в обработчик события
Page_Load:
Мы проверяем, первый ли раз была
запрошена эта страница при помощи
свойства IsPostBack. Иначе при
каждом обновлении страницы пункты меню
добавлялись бы снова и снова.
Также отображение в стиле
«Connect» не будет работать
на локальной машине, поэтому на этапе
создания опций выбора мы исключили его
из списка. В качестве отображения
по-умолчанию был выбран тип «Edit».
Он дает возможность увидеть все
возможности сайта.
В созданный ранее обработчик
событий PartsMenu_MenuItemClick добавим следующий
код:
Чтобы названия каждой части
сайта соответствовали содержанию, а не
несло пустые названия вроде Untitled[x],
в Page_Load
также стоит дописать:
Для реализации возможности
динамической загрузки данных из файла
также воспользуемся обработчиком
события Page_Load.
Но перед этим нужно добавить атрибуты
для ячейки, содержимое которой будет
динамически создаваться:
Атрибут runat=”server”
прверащает ячейку в HTML
server control, а
атрибут ID=”Header”
дает ей имя. Это позволит работать с
сайтом в привычной объектно-ориентированной
среде.
Теперь, чтобы реализовать
динамическую загрузку мы снова добавим
код в обработчик события Page_Load:
В переменную типа String
мы записываем физический путь сайта,
который можно получить, использовав
метод MapPath объекта Page.
Далее при помощи потока мы открываем
имеющийся файл и записываем все его
содержимое в контейнер Header,-
верхнюю левую ячейку страницы.
Заключение
В процессе выполнения данной
курсовой работы поставленные задачи и
цель были выполнены. Представлены общие
сведения о технологии .
В первой главе были рассмотрены
основные понятия разработки, сущность
и организация .
Также были рассмотрены все основные
технологии разработки и основные
отличительные особенности
от них. Был проведен сравнительный
анализ современной
с её предшественниками. Найдены основные
предпосылки появления и история данной
технологии. Достаточно подробно был
изучен алгоритм разработки Web-сайтов,
а также рассмотрены модели использования
HTML
server
controls
и Web
controls.
Во второй главе курсовой работы
были реализованы все поставленные
технические задачи. Было осуществлено
создание каркаса и дизайна сайта в
соответствие со стандартом XHTML.
Было осуществлено подключение к базе
данных посредством Microsoft SQL Server Database
File, сгенерирован не только Select,
но и Update,
Insert
и Delete
queries.
Web-сайт
«471 группа» позволяет добавлять и удалять
информацию об учащихся, изменять данные
и сохранять все произведенные изменения
при помощи двух интерфейсов. Также был
разработан модуль конвертера валют.
Использовалась технология Web-parts,
позволяющая динамически менять
расположение блоков сайта. Для демонстрации
возможность динамической загрузки
данных, была реализована динамическая
загрузка данных контейнера Header
из файла.
Список использованной литературы
-
Карли
Ватсон – С#, Издательство “Лори”,
Москва, 2005. -
Вильямс
– Microsoft 2.0 с примерами на C# 2005 для
профессионалов, Москва, 2006. -
Matthew
MacDonald – Beginning
3.5 in C# 2008: From Novice to Professional, Second Edition,
2007 -
Matthew
MacDonald and Mario Szpuszta – Pro 3.5 in C# 2008, Second
Edition, 2007 -
– электронный ресурс. -
– электронный ресурс. -
– электронный ресурс. -
– электронный ресурс. -
http://www.microsoft.com
– электронный ресурс. -
http://www.asp.net
– электронный ресурс.
Приложение 1
Листинг Web-страницы
Defulat.aspx
<%@
Page
Language=”C#”
AutoEventWireup=”true”
CodeFile=”Default.aspx.cs”
Inherits=”_Default”
%>
<!DOCTYPE
html
PUBLIC
“-//W3C//DTD
XHTML 1.0 Transitional//EN”
“/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html
xmlns=”/1999/xhtml”>
<head
runat=”server”>
<title>471
группа</title>
</head>
<body>
<form
id=”form1″
runat=”server”>
<div>
<asp:WebPartManager
runat=”server”
ID=”MyPartManager”
/>
<table
style=”width:
80%;
text-align:justify;”>
<tr
valign=”middle”
style=”>
<td
colspan=”2″
runat=”server”
id=”Header”>
</td>
<td
style=”height:
22px”>
<asp:Menu
ID=”PartsMenu”
runat=”server”
OnMenuItemClick=”PartsMenu_MenuItemClick”>
</asp:Menu>
</td>
</tr>
<tr
valign=”top”>
<td
style=”width:
20%”>
<asp:CatalogZone
ID=”SimpleCatalog”
runat=”server”
BackColor=”#F7F6F3″
BorderColor=”#CCCCCC”
BorderWidth=”1px”
Font-Names=”Verdana”
Padding=”6″
HeaderText=”Выбор”>
<HeaderVerbStyle
Font-Bold=”False”
Font-Size=”0.8em”
Font-Underline=”False”
ForeColor=”#333333″
/>
<PartTitleStyle
BackColor=”#5D7B9D”
Font-Bold=”True”
Font-Size=”0.8em”
ForeColor=”White”
/>
<FooterStyle
BackColor=”#E2DED6″
HorizontalAlign=”Right”
/>
<PartChromeStyle
BorderColor=”#E2DED6″
BorderStyle=”Solid”
BorderWidth=”1px”
/>
<PartLinkStyle
Font-Size=”0.8em”
/>
<InstructionTextStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<ZoneTemplate>
<asp:PageCatalogPart
ID=”PageCatalogPart1″
runat=”server”
Title=”Части”
/>
</ZoneTemplate>
<LabelStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<SelectedPartLinkStyle
Font-Size=”0.8em”
/>
<VerbStyle
Font-Names=”Verdana”
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<HeaderStyle
BackColor=”#E2DED6″
Font-Bold=”True”
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<EditUIStyle
Font-Names=”Verdana”
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<PartStyle
BorderColor=”#F7F6F3″
BorderWidth=”5px”
/>
<EmptyZoneTextStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
</asp:CatalogZone>
<br
/>
<asp:EditorZone
runat=”server”
ID=”SimpleEditor”
BackColor=”#F7F6F3″
BorderColor=”#CCCCCC”
BorderWidth=”1px”
Font-Names=”Verdana”
Padding=”6″>
<FooterStyle
BackColor=”#E2DED6″
HorizontalAlign=”Right”
/>
<PartTitleStyle
Font-Bold=”True”
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<PartChromeStyle
BorderColor=”#E2DED6″
BorderStyle=”Solid”
BorderWidth=”1px”
/>
<PartStyle
BorderColor=”#F7F6F3″
BorderWidth=”5px”
/>
<LabelStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<VerbStyle
Font-Names=”Verdana”
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<ErrorStyle
Font-Size=”0.8em”
/>
<EmptyZoneTextStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<ZoneTemplate>
<asp:PropertyGridEditorPart
ID=”MyPropertyEditor”
runat=”server”
/>
<asp:AppearanceEditorPart
ID=”MyMainEditor”
runat=”server”
/>
</ZoneTemplate>
<EditUIStyle
Font-Names=”Verdana”
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<HeaderStyle
BackColor=”#E2DED6″
Font-Bold=”True”
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<HeaderVerbStyle
Font-Bold=”False”
Font-Size=”0.8em”
Font-Underline=”False”
ForeColor=”#333333″
/>
<InstructionTextStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
</asp:EditorZone>
</td>
<td
style=”width:
60%”>
<asp:WebPartZone
ID=”MainZone”
runat=”server”
Height=”161px”
Width=”357px”
BorderColor=”#CCCCCC”
Font-Names=”Verdana”
Padding=”6″
HeaderText=”Средняя
зона”
EmptyZoneText=”Добавьте
сюда
модули”>
<EmptyZoneTextStyle
Font-Size=”0.8em”
/>
<PartStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<TitleBarVerbStyle
Font-Size=”0.6em”
Font-Underline=”False”
ForeColor=”White”
/>
<MenuLabelHoverStyle
ForeColor=”#E2DED6″
/>
<MenuPopupStyle
BackColor=”#5D7B9D”
BorderColor=”#CCCCCC”
BorderWidth=”1px”
Font-Names=”Verdana”
Font-Size=”0.6em”
/>
<MenuVerbStyle
BorderColor=”#5D7B9D”
BorderStyle=”Solid”
BorderWidth=”1px”
ForeColor=”White”
/>
<PartTitleStyle
BackColor=”#5D7B9D”
Font-Bold=”True”
Font-Size=”0.8em”
ForeColor=”White”
/>
<ZoneTemplate>
<asp:GridView
ID=”GridView1″
runat=”server”
AutoGenerateColumns=”False”
DataSourceID=”SqlDataSource1″
EmptyDataText=”Нет
данных”
Caption=”471
группа”
RowHeaderColumn=”name”>
<Columns>
<asp:BoundField
DataField=”name”
HeaderText=”Имя”
SortExpression=”name”
/>
<asp:BoundField
DataField=”surname”
HeaderText=”Фамилия”
SortExpression=”surname”
/>
<asp:BoundField
DataField=”year”
HeaderText=”Год
рождения”
SortExpression=”year”
/>
<asp:BoundField
DataField=”phone”
HeaderText=”Телефон”
SortExpression=”phone”
/>
</Columns>
</asp:GridView>
<asp:ListView
ID=”ListView1″
runat=”server”
DataKeyNames=”num”
DataSourceID=”SqlDataSource1″
InsertItemPosition=”LastItem”>
<AlternatingItemTemplate>
<li
style=”background-color:
#FFF8DC;”>num:
<asp:Label
ID=”numLabel”
runat=”server”
Text='<%#
Eval(“num”) %>’
/>
<br
/>
Имя:
<asp:Label
ID=”nameLabel”
runat=”server”
Text='<%#
Eval(“name”) %>’
/>
<br
/>
Фамилия:
<asp:Label
ID=”surnameLabel”
runat=”server”
Text='<%#
Eval(“surname”) %>’
/>
<br
/>
Телефон:
<asp:Label
ID=”phoneLabel”
runat=”server”
Text='<%#
Eval(“phone”) %>’
/>
<br
/>
Год
рождения:
<asp:Label
ID=”yearLabel”
runat=”server”
Text='<%#
Eval(“year”) %>’
/>
<br
/>
<asp:Button
ID=”EditButton”
runat=”server”
CommandName=”Edit”
Text=”Редактировать”
/>
<asp:Button
ID=”DeleteButton”
runat=”server”
CommandName=”Delete”
Text=”Удалить”
/>
</li>
</AlternatingItemTemplate>
<LayoutTemplate>
<ul
ID=”itemPlaceholderContainer”
runat=”server”
style=”font-family:
Verdana,
Arial,
Helvetica,
sans-serif;”>
<li
ID=”itemPlaceholder”
runat=”server”
/>
</ul>
<div
style=”text-align:
center;background-color:
#CCCCCC;font-family:
Verdana,
Arial,
Helvetica,
sans-serif;color:
#000000;”>
</div>
</LayoutTemplate>
<InsertItemTemplate>
<li
style=””>num:
<asp:TextBox
ID=”numTextBox”
runat=”server”
Text='<%#
Bind(“num”) %>’
/>
<br
/>
Имя:
<asp:TextBox
ID=”nameTextBox”
runat=”server”
Text='<%#
Bind(“name”) %>’
/>
<br
/>
Фамилия:
<asp:TextBox
ID=”surnameTextBox”
runat=”server”
Text='<%#
Bind(“surname”) %>’
/>
<br
/>
Телефон:
<asp:TextBox
ID=”phoneTextBox”
runat=”server”
Text='<%#
Bind(“phone”) %>’
/>
<br
/>
Год
рождения:
<asp:TextBox
ID=”yearTextBox”
runat=”server”
Text='<%#
Bind(“year”) %>’
/>
<br
/>
<asp:Button
ID=”InsertButton”
runat=”server”
CommandName=”Insert”
Text=”Добавить”
/>
<asp:Button
ID=”CancelButton”
runat=”server”
CommandName=”Cancel”
Text=”Очистить”
/>
</li>
</InsertItemTemplate>
<SelectedItemTemplate>
<li
style=”background-color:
#008A8C;font-weight:
bold;color:
#FFFFFF;”>num:
<asp:Label
ID=”numLabel”
runat=”server”
Text='<%#
Eval(“num”) %>’
/>
<br
/>
Имя:
<asp:Label
ID=”nameLabel”
runat=”server”
Text='<%#
Eval(“name”) %>’
/>
<br
/>
Фамилия:
<asp:Label
ID=”surnameLabel”
runat=”server”
Text='<%#
Eval(“surname”) %>’
/>
<br
/>
Телефон:
<asp:Label
ID=”phoneLabel”
runat=”server”
Text='<%#
Eval(“phone”) %>’
/>
<br
/>
Год:
<asp:Label
ID=”yearLabel”
runat=”server”
Text='<%#
Eval(“year”) %>’
/>
<br
/>
<asp:Button
ID=”EditButton”
runat=”server”
CommandName=”Edit”
Text=”Редактировать”
/>
<asp:Button
ID=”DeleteButton”
runat=”server”
CommandName=”Удалить”
Text=”Delete”
/>
</li>
</SelectedItemTemplate>
<EmptyDataTemplate>
No data
was returned.
</EmptyDataTemplate>
<EditItemTemplate>
<li
style=”background-color:
#008A8C;color:
#FFFFFF;”>num:
<asp:Label
ID=”numLabel1″
runat=”server”
Text='<%#
Eval(“num”) %>’
/>
<br
/>
Имя:
<asp:TextBox
ID=”nameTextBox”
runat=”server”
Text='<%#
Bind(“name”) %>’
/>
<br
/>
Фамилия:
<asp:TextBox
ID=”surnameTextBox”
runat=”server”
Text='<%#
Bind(“surname”) %>’
/>
<br
/>
Телефон:
<asp:TextBox
ID=”phoneTextBox”
runat=”server”
Text='<%#
Bind(“phone”) %>’
/>
<br
/>
Год
рождения:
<asp:TextBox
ID=”yearTextBox”
runat=”server”
Text='<%#
Bind(“year”) %>’
/>
<br
/>
<asp:Button
ID=”UpdateButton”
runat=”server”
CommandName=”Update”
Text=”Обновить”
/>
<asp:Button
ID=”CancelButton”
runat=”server”
CommandName=”Cancel”
Text=”Отменить”
/>
</li>
</EditItemTemplate>
<ItemTemplate>
<li
style=”background-color:
#DCDCDC;color:
#000000;”>num:
<asp:Label
ID=”numLabel”
runat=”server”
Text='<%#
Eval(“num”) %>’
/>
<br
/>
Имя:
<asp:Label
ID=”nameLabel”
runat=”server”
Text='<%#
Eval(“name”) %>’
/>
<br
/>
Фамилия:
<asp:Label
ID=”surnameLabel”
runat=”server”
Text='<%#
Eval(“surname”) %>’
/>
<br
/>
Телефон:
<asp:Label
ID=”phoneLabel”
runat=”server”
Text='<%#
Eval(“phone”) %>’
/>
<br
/>
Год
рождения:
<asp:Label
ID=”yearLabel”
runat=”server”
Text='<%#
Eval(“year”) %>’
/>
<br
/>
<asp:Button
ID=”EditButton”
runat=”server”
CommandName=”Edit”
Text=”Редактировать”
/>
<asp:Button
ID=”DeleteButton”
runat=”server”
CommandName=”Delete”
Text=”Удалить”
/>
</li>
</ItemTemplate>
<ItemSeparatorTemplate>
<br
/>
</ItemSeparatorTemplate>
</asp:ListView>
</ZoneTemplate>
<MenuVerbHoverStyle
BackColor=”#F7F6F3″
BorderColor=”#CCCCCC”
BorderStyle=”Solid”
BorderWidth=”1px”
ForeColor=”#333333″
/>
<PartChromeStyle
BackColor=”#F7F6F3″
BorderColor=”#E2DED6″
Font-Names=”Verdana”
ForeColor=”White”
/>
<HeaderStyle
Font-Size=”0.7em”
ForeColor=”#CCCCCC”
HorizontalAlign=”Center”
/>
<MenuLabelStyle
ForeColor=”White”
/>
</asp:WebPartZone>
</td>
<td
style=”width:
20%”>
<asp:WebPartZone
ID=”HelpZone”
runat=”server”
BorderColor=”#CCCCCC”
Font-Names=”Verdana”
Padding=”6″
HeaderText=”Правая
зона”
EmptyZoneText=”Добавьте
сюда
модули”>
<EmptyZoneTextStyle
Font-Size=”0.8em”
/>
<PartStyle
Font-Size=”0.8em”
ForeColor=”#333333″
/>
<TitleBarVerbStyle
Font-Size=”0.6em”
Font-Underline=”False”
ForeColor=”White”
/>
<MenuLabelHoverStyle
ForeColor=”#E2DED6″
/>
<MenuPopupStyle
BackColor=”#5D7B9D”
BorderColor=”#CCCCCC”
BorderWidth=”1px”
Font-Names=”Verdana”
Font-Size=”0.6em”
/>
<MenuVerbStyle
BorderColor=”#5D7B9D”
BorderStyle=”Solid”
BorderWidth=”1px”
ForeColor=”White”
/>
<PartTitleStyle
BackColor=”#5D7B9D”
Font-Bold=”True”
Font-Size=”0.8em”
ForeColor=”White”
/>
<ZoneTemplate>
<asp:Calendar
ID=”Calendar1″
runat=”server”></asp:Calendar>
<asp:Panel
ID=”ConverterPanel”
runat=”server”>
<asp:TextBox
ID=”TextBox1″
runat=”server”
Width=”94px”></asp:TextBox>
<br
/>
<asp:DropDownList
ID=”DropDownList1″
runat=”server”>
<asp:ListItem
Value=”42,5″>Евро</asp:ListItem>
<asp:ListItem
Value=”35,2″>Доллар</asp:ListItem>
<asp:ListItem
Value=”3,2″>Гривна</asp:ListItem>
</asp:DropDownList><br
/>
<asp:Button
ID=”Button1″
runat=”server”
Text=”Отправить”
onclick=”Button1_Click”
/><br
/>
<asp:Label
ID=”Label1″
runat=”server”></asp:Label>
</asp:Panel>
</ZoneTemplate>
<MenuVerbHoverStyle
BackColor=”#F7F6F3″
BorderColor=”#CCCCCC”
BorderStyle=”Solid”
BorderWidth=”1px”
ForeColor=”#333333″
/>
<PartChromeStyle
BackColor=”#F7F6F3″
BorderColor=”#E2DED6″
Font-Names=”Verdana”
ForeColor=”White”
/>
<HeaderStyle
Font-Size=”0.7em”
ForeColor=”#CCCCCC”
HorizontalAlign=”Center”
/>
<MenuLabelStyle
ForeColor=”White”
/>
</asp:WebPartZone>
</td>
</tr>
<tr>
<td
colspan=”3″>
<asp:SqlDataSource
ID=”SqlDataSource1″
runat=”server”
ConnectionString=”<%$
ConnectionStrings:MyDataBaseConnectionString2 %>”
DeleteCommand=”DELETE
FROM [mygroupmates] WHERE [num] = @num”
InsertCommand=”INSERT
INTO [mygroupmates] ([num], [surname], [name], [year], [phone])
VALUES (@num, @surname, @name, @year, @phone)”
SelectCommand=”SELECT
[num], [surname], [name], [year], [phone] FROM [mygroupmates]”
UpdateCommand=”UPDATE
[mygroupmates] SET [surname] = @surname, [name] = @name, [year] =
@year, [phone] = @phone WHERE [num] = @num”>
<DeleteParameters>
<asp:Parameter
Name=”num”
Type=”Int32″
/>
</DeleteParameters>
<UpdateParameters>
<asp:Parameter
Name=”surname”
Type=”String”
/>
<asp:Parameter
Name=”name”
Type=”String”
/>
<asp:Parameter
Name=”year”
Type=”String”
/>
<asp:Parameter
Name=”phone”
Type=”String”
/>
<asp:Parameter
Name=”num”
Type=”Int32″
/>
</UpdateParameters>
<InsertParameters>
<asp:Parameter
Name=”num”
Type=”Int32″
/>
<asp:Parameter
Name=”surname”
Type=”String”
/>
<asp:Parameter
Name=”name”
Type=”String”
/>
<asp:Parameter
Name=”year”
Type=”String”
/>
<asp:Parameter
Name=”phone”
Type=”String”
/>
</InsertParameters>
</asp:SqlDataSource>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Приложение 2
Листинг программы Default.aspx.cs
using
System;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
public
partial
class
_Default
: System.Web.UI.Page
{
protected
void
PartsMenu_MenuItemClick(object
sender, MenuEventArgs
e)
{
try
{
if
(e.Item.Text != null)
{
MyPartManager.DisplayMode
= MyPartManager.DisplayModes[e.Item.Text];
}
}
catch
{
}
}
protected
void
Page_Load(object
sender, EventArgs
e)
{
string
CurrentPath = Page.MapPath(“header.txt”);
System.IO.StreamReader
myReader = new
System.IO.StreamReader(CurrentPath);
nerHtml
= myReader.ReadToEnd();
MyPartManager.WebParts[0].Title
= “База
Данных”;
MyPartManager.WebParts[1].Title
= “База
Данных С Добавлением”;
MyPartManager.WebParts[2].Title
= “Календарь”;
MyPartManager.WebParts[3].Title
= “Конвертер”;
if
(!this.IsPostBack)
{
MenuItem
Root = new
MenuItem(“Выберите
режим”);
foreach
(WebPartDisplayMode
mode in
MyPartManager.DisplayModes)
{
if
(mode.IsEnabled(MyPartManager) && (!=”Connect”))
{
Root.ChildItems.Add(new
MenuItem());
}
}
PartsMenu.Items.Add(Root);
MyPartManager.DisplayMode
= MyPartManager.DisplayModes[“Edit”];
}
}
protected
void
Button1_Click(object
sender, EventArgs
e)
{
try
{
Label1.Text
= Convert.ToString(Decimal.Parse(TextBox1.Text)
*
Decimal.Parse(DropDownList1.SelectedItem.Value));
}
catch
{
Label1.Text
= “Ошибка”;
TextBox1.Text
= “”;
}
}
}
Государственное образовательное учреждение
высшего профессионального образования Тюменской области
«ТЮМЕНСКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ
МИРОВОЙ ЭКОНОМИКИ, УПРАВЛЕНИЯ И ПРАВА»
Факультет управления
Кафедра математики, информатики
и естественных наук
Курсовая работа
на тему:
«Windows Presentation Foundation»
Выполнил:
студент 471 гр.
Куничник Д.С.
Проверил:
Захаров С.Д.
Тюмень 2010
Введение 3
1.Основные понятия WPF. 5
1.1 Особенности платформы .NET 5
1.3 WPF: высокоуровневый API 7
1.4 Разработка с использованием WPF 8
2. Разработка WPF-приложения «Словарь» 9
2.1Технические задачи 9
2.2 Создание дизайна 10
2.3 Создание базы данных и подключение к ней 16
2.4 Кодовая реализация 17
Заключение 19
Список использованной литературы 20
Приложение 1 21
Листинг Web-страницы Defulat.aspx 21
Приложение 2 28
Листинг программы Default.aspx.cs 28
Введение
Несмотря на быстрое развитие Интернета и связанных с ним технологий, Web-приложения ещё долгое время не смогут вытеснить Windows-приложения из-за достаточно большого количества ограничений. Поэтому актуальность разработки Windows-приложений не вызывает вопросов.
Microsoft не перестает выпускать всё новые и новые версии операционной системы и средств разработки для неё. Если когда-то создание калькулятора занимало многие часы, то с появлением Windows Forms, а затем и платформы .NET все изменилось.
Несмотря на то что Windows Forms является зрелым и полнофункциональным инструментальным средством, оно жестко связано с основными конструктивными особенностями Windows, которые не меняются на протяжении последних десяти лет. Более того, Windows Forms основывается на интерфейсе Windows API при создании внешнего вида стандартных элементов пользовательского интерфейса, таких как кнопки, текстовые окна, флажки и т.п. Как результат, эти ингредиенты, по сути, не поддаются настройке. Например, чтобы создать элегантную кнопку, нужно построить специальный элемент управления и раскрасить каждую частицу кнопки (во всех ее разных состояниях) с помощью низкоуровневой модели рисования. Более того, обычные окна делятся на разные области, в каждой из которых имеются свои элементы управления.
В результате нет хорошего способа рисования в отдельном элементе управления (например, эффекта свечения ниже кнопки), чтобы при этом не затронуть областей, которыми владеют другие элементы. И даже не думайте об анимационных эффектах, таких как вращающийся текст, мерцающие окна или живые окна предварительного просмотра, поскольку вам придется рисовать каждую деталь вручную.
Все поменялось благодаря новой модели с совершенно другой структурой, которую предлагает Windows Presentation Foundation (WPF). Несмотря на то, что WPF включает уже знакомые стандартные элементы управления, она сама рисует каждый текст, рамку и фон. Как результат, WPF может предложить гораздо больше мощных функций. Итак,
Объект курсовой работы: Windows Presentation Foundation.
Предмет работы: разработка Windows-приложений.
Цель: разработать Windows-приложение, основанный на технологии WPF
Задачи, решение которых необходимо для достижения поставленной цели:
- Рассмотреть платформу .NET.
- Изучить основы .NET.
- Изучить основы WPF.
- Разработать приложение «Словарь», использующее возможности WPF.
Актуальность данной работы заключается в том, что Windows является самой распространенной операционной системой и рынок Windows-приложений остается перспективным.
-
Основные понятия WPF.
Windows
Presentation Foundation
Windows
Presentation Foundation
(WPF) —
система для построения клиентских
приложений Windows
с визуально привлекательными возможностями
взаимодействия с пользователем,
графическая (презентационная) подсистема
в составе .NET
Framework
(начиная с версии 3.0),
использующая язык XAML[2].
WPF
предустановлена
в
Windows
Vista(.NET
Framework
3.0), Windows
7(.NET
Framework
3.5 SP1), Windows
8
(.NET Framework 4.0 и
4.5). С
помощью WPF можно создавать широкий
спектр как автономных, так и запускаемых
в браузере
приложений[3].
Содержание
|
Особенности
технологии
В
основе WPF лежит векторная система
визуализации, не зависящая от разрешения
устройства вывода и созданная с учётом
возможностей современного графического
оборудования. WPF предоставляет средства
для создания визуального интерфейса,
включая язык XAML
(Extensible Application Markup Language), элементы
управления, привязку данных, макеты,
двухмерную и трёхмерную графику,
анимацию, стили, шаблоны, документы,
текст, мультимедиа и оформление[3].
Графической
технологией, лежащей в основе WPF, является
DirectX,
в отличие от Windows
Forms,
где используется GDI/GDI+[4].
Производительность WPF
выше, чем у GDI+
за счёт использования аппаратного
ускорения графики через DirectX.
Также
существует урезанная версия CLR,
называющаяся WPF/E,
она же известна как Silverlight.
Использование
разметки XAML
XAML
представляет собой XML,
в котором фактически реализованы классы
.NET
Framework.
Также реализована модель разделения
кода и дизайна, позволяющая кооперироваться
программисту и дизайнеру. Кроме того,
есть встроенная поддержка стилей
элементов, а сами элементы легко разделить
на элементы
управления
второго уровня, которые, в свою очередь,
разделяются до уровня векторных фигур
и свойств/действий. Это позволяет легко
задать стиль для любого элемента,
например, Button
(кнопка).
Средства
разработки
Для
работы с WPF требуется любой .NET-совместимый
язык. В этот список входит множество
языков: C#,
VB,
C++,
Ruby,
Python,
Delphi
(Prism),
Lua
и многие другие. Для полноценной работы
может быть использована как Visual
Studio,
так и Expression
Blend.
Первая ориентирована на программирование,
а вторая — на дизайн и позволяет
делать многие вещи, не прибегая к ручному
редактированию XAML.
Примеры этому — анимация, стилизация,
состояния, создание элементов управления
и так далее.
WPF:
Нестандартное окно
.NET*
На
днях, после долгого перерыва, надо было
поработать на WPF, и возникло желание
заменить поднадоевший стандартный вид
окон Windows 7 на что-нибудь более вдохновляющее,
скажем в стиле Visual Studio 2012:
Переходить
на Windows 8 ради этого еще не хотелось, как
и добавлять в проекты ссылки на
метро-подобные библиотеки и разбираться
с ними — это будет следуюшим шагом. А
пока было интересно потратить вечер и
добиться такого результата с минимальными
изменениями рабочего кода. Забегая
вперед, скажу что результат, как и
планировалось, получился довольно
чистым: фрагмент следующего кода, если
не считать нескольких аттрибутов
пропущенных для наглядности, это и есть
окно с первого скриншота. Все изменения
ограничились заданием стиля.
Обновление
3 декабря: в репозиторий добавлена
альтернативная имплементация использующая
новые классы в .Net 4.5 (проект WindowChrome.Demo),
что позволило избежать существенной
части нативного программирования с
WinAPI.
<Window
…
Style=”{StaticResource
VS2012WindowStyle}”>
<DockPanel>
<StatusBar>
<TextBlock>Ready</TextBlock>
<StatusBarItem
HorizontalAlignment=”Right”>
<ResizeGrip
/>
</StatusBarItem>
</StatusBar>
<TextBox
Text=”Hello,
world!”
/>
</DockPanel>
</Window>
Дальше
я остановлюсь на ключевых моментах и
подводных камнях при создания стиля
окна. Демонстрационный проект доступен
на github’е,
если вы захотите поразбираться с
исходниками самостоятельно или же
просто использовать этот стиль не
вдаваясь в подробности.
Основная
проблема
WPF
не работает с NC-area.
NC, она же «Non-client area», она же «не-клиентская
часть», она же хром, обрабатывается на
более низком уровне. Если вам захотелось
изменить какой-то из элементов окна —
бордюр, иконку, заголовок или кнопку,
то первый совет,
который попадается при поиске — это
убрать стиль окна и переделать все
самому. Целиком.
<Window
AllowsTransparency=”true”
WindowStyle=”None”>
…
За
всю историю развития WPF в этом отношении
мало что изменилось. К счастью, у меня
были исходники из старинного поста
Алекса Яхнина по стилизации под Офис
2007, которые он писал работая над демо
проектом по популяризации WPF для
Микрософта, так что с нуля начинать мне
не грозило.
В
итоге нам надо получить один стиль, и
по возможности, без дополнительных
контролов: в дереве проекта XAML и код
стиля расположились в директории
CustomizedWindow, а основное окно в корне
проекта.
Мне хотелось избежать
добавления новых библиотек в проект,
но сохранить возможность легко перенести
стиль в другое приложение, что и определило
такую структуру.
Создаем
стиль
Стиль
для окна, как и для любого другого
контрола в WPF задается при помощи
ControlTemplate. Содержимое окна будет
показываться ContentPresenter’ом, а функциональность
которую проще сделать в коде c#, подключится
через x:Class атрибут в ResourceDictionary. Все очень
стандартно для XAML’а.
<ResourceDictionary
x:Class=”Whush.Demo.Styles.CustomizedWindow.VS2012WindowStyle”>
<Style
x:Key=”VS2012WindowStyle”
TargetType=”{x:Type
Window}”>
<Setter
Property=”Template”>
<Setter.Value>
<ControlTemplate
TargetType=”{x:Type Window}”>
<!–
XAML хрома окна с отрисовкой бордюра,
иконки и кнопок –>
<ContentPresenter
/>
<!–
еще
XAML хрома
окна
–>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Сразу
же определим кнопки управления окном
в стиле Студии 2012. Это будет единственный
дополнительный глобальный стиль на
случай если потом возникнет желание
использовать такие кнопки в
приложении.
Нам
нужна функциональность обычной кнопки,
но с очень примитивной отрисовкой —
фактически только фон и содержимое.
XAML
стиля
кнопки
<Style
x:Key=”VS2012WindowStyleTitleBarButton”
TargetType=”{x:Type
Button}”>
<Setter
Property=”Focusable” Value=”false” />
<Setter
Property=”Template”>
<Setter.Value>
<ControlTemplate
TargetType=”{x:Type Button}”>
<Grid>
<Border
x:Name=”border” Background=”Transparent” />
<ContentPresenter
/>
</Grid>
<ControlTemplate.Triggers>
<Trigger
Property=”IsMouseOver” Value=”True”>
<Setter
TargetName=”border” Property=”Background”
Value=”#FFF” />
<Setter
TargetName=”border” Property=”Opacity”
Value=”0.7″ />
</Trigger>
<Trigger
Property=”IsPressed” Value=”True”>
<Setter
TargetName=”border” Property=”Background”
Value=”{StaticResource
VS2012WindowBorderBrush}”/>
<Setter
TargetName=”border” Property=”Opacity” Value=”1″
/>
<Setter
Property=”Foreground” Value=”#FFF”/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Изображения
на кнопках проще всего сделать «в
векторе». Например, вот так выглядит
maximize:
<Path
StrokeThickness=”1″
RenderOptions.EdgeMode=”Aliased”
Data=”M0,0
H8 V8 H0 V0 M0,1 H8 M0,2 H8″
/>
Для
текста заголовка используем стандартный
шрифт Segoe UI. Единственная особенность
здесь — убедиться, что текст отрисован
без размытия, иначе заголовок окна будет
выглядеть… плохо он будет выглядеть —
как во второй строчке на скриншоте.
Кстати,
для Path’а на кнопках с той же целью
использовался EdgeMode=«Aliased», а
для текста
в WPF 4+ появилась долгожданная возможность
указать, что отображаться он будет на
дисплее, а не на «идеальном устройстве»,
что и позволило добиться приемлимой
четкости на наших неидеальных экранах.
<TextBlock
TextOptions.TextRenderingMode=”ClearType”
TextOptions.TextFormattingMode=”Display”
>
…
Еще
одна интересная особенность связана с
«геометрией Windows 7» при распахивании
окна на весь экран. Windows жульничает,
масштабируя окно так, что бордюр целиком
уходит за границу экрана, оставляя на
мониторе только клиентскую часть окна.
Естественно, что Windows при этом больше
не отрисовывает бордюр и для стандартных
окон все работает как ожидалось. WPF это
никак не отрабатывает и, для таких окон
как у нас, есть риск потерять часть
изображения или начать рисовать на
соседнем мониторе, если он
подключен.
Остальные детали менее
существенны, но если интересно, добро
пожаловать в исходники.
Оживляем
окно
.Net
4.0
Помимо
реакции на кнопки и иконку, окно должно
перемещаться и изменять размер при
drag’е за заголовок, за края и уголки.
Соответствующие горячие зоны проще
всего задать при помощи невидимых
контролов. Пример для левого верхнего
(северо-западного) угла.
<Rectangle
x:Name=”rectSizeNorthWest”
MouseDown=”OnSizeNorthWest”
Cursor=”SizeNWSE”
Fill=”Transparent”
VerticalAlignment=”Top”
HorizontalAlignment=”Left”
Width=”5″
Height=”5″
/>
При
наличие атрибута Class в ресурсах, методы
этого класса можно вызывать просто по
имени как обычные обработчики событий,
чем мы и воспользовались. Сами обработчики,
например MinButtonClick и OnSizeNorthWest, выглядят
примерно так:
void
MinButtonClick(object sender, RoutedEventArgs e) {
Window
window = ((FrameworkElement)sender).TemplatedParent
as Window;
if
(window != null) window.WindowState
= WindowState.Minimized;
}
void
OnSizeNorthWest(object sender) {
if
(Mouse.LeftButton
== MouseButtonState.Pressed)
{
Window
window = ((FrameworkElement)sender).TemplatedParent
as Window;
if
(window != null && window.WindowState
== WindowState.Normal)
{
DragSize(w.GetWindowHandle(),
SizingAction.NorthWest);
}
}
}
DragSize
далее вызывает WinAPI (исходник)
и заставляет Windows перейти в режим
измененения размера окна как в
до-дотнетовские времена.
.Net
4.5
В
4.5 появились удобные классы SystemCommands
и WindowChrome.
При добавлении к окну, WindowChrome берет на
себя функции изменения размера, положения
и состояния окна, оставляя нам более
«глобальные» проблемы.
<Setter
Property=”WindowChrome.WindowChrome”>
<Setter.Value>
<WindowChrome
NonClientFrameEdges=”None”
GlassFrameThickness=”0″
ResizeBorderThickness=”7″
CaptionHeight=”32″
CornerRadius=”0″
/>
</Setter.Value>
</Setter>
При
желании, можно использовать WindowChrome и
на .Net 4.0, но придется добавить дополнительные
библиотеки, например WPFShell
(спасибо afsherman
за подсказку).
Почти готово. Зададим
триггеры для контроля изменений
интерфейса при изменении состояния
окна. Вернемся в XAML и, например, заставим
StatusBar’ы изменять цвет в зависимости от
значения Window.IsActive.
XAML
для
StatusBar’а
<Style.Resources>
<Style
TargetType=”{x:Type
StatusBar}”>
<Style.Triggers>
<DataTrigger
Value=”True”
Binding=”{Binding
IsActive, RelativeSource={RelativeSource AncestorType=Window}}”>
<Setter
Property=”Foreground”
Value=”{StaticResource
VS2012WindowStatusForeground}” />
<Setter
Property=”Background”
Value=”{StaticResource
VS2012WindowBorderBrush}” />
</DataTrigger>
<DataTrigger
Value=”False”
Binding=”{Binding
IsActive, RelativeSource={RelativeSource AncestorType=Window}}”
>
<Setter
Property=”Foreground”
Value=”{StaticResource
VS2012WindowStatusForegroundInactive}” />
<Setter
Property=”Background”
Value=”{StaticResource
VS2012WindowBorderBrushInactive}” />
</DataTrigger>
</Style.Triggers>
</Style>
</Style.Resources>
Обратите
внимание, что этот стиль влияет не на
темплэйт окна, а на контролы помещенные
в наше окно. Помните самый первый фрагмент
с пользовательским кодом?
<Window
…
Style=”{StaticResource
VS2012WindowStyle}”>
…
<StatusBarItem
HorizontalAlignment=”Right”>
…
</Window>
Вот
стиль именно этого StatusBar’а мы сейчас и
задали. При желании и времени так же
можно задать и стиль для других классов
контролов, например подправить ScrollBar,
чтобы он тоже соответствовал нужному
стилю. Но это уже будет упражнение на
следующий свободный вечер.
Собираем
все вместе
Все.
Нам осталось только подключить стиль
к проекту через ресурсы приложения:
<Application
…
StartupUri=”MainWindow.xaml”>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source=”Styles/CustomizedWindow/VS2012WindowStyle.xaml”
/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
И
можно использовать его в любом окне.
—
Д.
Соседние файлы в папке !
- #
- #
- #
- #
- #
- #
Особенности платформы WPF
Последнее обновление: 13.11.2022
Технология WPF (Windows Presentation Foundation) является часть экосистемы платформы .NET и представляет собой подсистему для построения графических интерфейсов.
Если при создании традиционных приложений на основе WinForms за отрисовку элементов управления и графики отвечали такие части ОС Windows, как User32 и GDI+,
то приложения WPF основаны на DirectX. В этом состоит ключевая особенность рендеринга графики в WPF: используя WPF,
значительная часть работы по отрисовке графики, как простейших кнопочек, так и сложных 3D-моделей, ложиться на графический процессор на видеокарте,
что также позволяет воспользоваться аппаратным ускорением графики.
Одной из важных особенностей является использование языка декларативной разметки интерфейса XAML, основанного на XML: вы можете создавать насыщенный
графический интерфейс, используя или декларативное объявление интерфейса, или код на управляемых языках C#, VB.NET и F#, либо совмещать и то, и другое.
Первая версия – WPF 3.0 вышла вместе с .NET Framework 3.0 и операционной системой
Windows Vista в 2006 году. И с тех пор платформа WPF является частью экосистемы .NET и развивается вместе с фреймворком .NET. Например, на сегодняшний день последней версией фреймворка
.NET является .NET 7, и WPF полностью поддерживается этой версией фреймворка.
Преимущества WPF
Что вам, как разработчику, предлагает WPF?
-
Использование традиционных языков .NET-платформы – C#, F# и VB.NET для создания логики приложения
-
Возможность декларативного определения графического интерфейса с помощью специального языка разметки XAML, основанном на xml и представляющем
альтернативу программному созданию графики и элементов управления, а также возможность комбинировать XAML и C#/VB.NET -
Независимость от разрешения экрана: поскольку в WPF все элементы измеряются в независимых от устройства единицах, приложения на WPF легко масштабируются под разные экраны с разным разрешением.
-
Новые возможности, которых сложно было достичь в WinForms, например, создание трехмерных моделей, привязка данных, использование таких элементов, как стили, шаблоны, темы и др.
-
Хорошее взаимодействие с WinForms, благодаря чему, например, в приложениях WPF можно использовать традиционные элементы управления из WinForms.
-
Богатые возможности по созданию различных приложений: это и мультимедиа, и двухмерная и трехмерная графика, и богатый набор встроенных
элементов управления, а также возможность самим создавать новые элементы, создание анимаций, привязка данных, стили, шаблоны, темы и многое другое -
Аппаратное ускорение графики – вне зависимости от того, работаете ли вы с 2D или 3D, графикой или текстом, все компоненты приложения
транслируются в объекты, понятные Direct3D, и затем визуализируются с помощью процессора на видеокарте, что повышает производительность, делает графику более плавной. -
Создание приложений под множество ОС семейства Windows
В тоже время WPF имеет определенные ограничения. Несмотря на поддержку трехмерной визуализации, для создания приложений с большим количеством трехмерных изображений, прежде всего игр, лучше использовать другие средства – DirectX
или специальные фреймворки, такие как Monogame или Unity.
Также стоит учитывать, что по сравнению с приложениями на Windows Forms объем программ на WPF и потребление ими памяти в процессе работы в среднем несколько выше. Но это с лихвой компенсируется
более широкими графическими возможностями и провышенной производительностью при отрисовке графики.
Кроме того, несмотря на то, что WPF работает поверх кроссплатформенной среды .NET 5/6/7, но в силу природы WPF и зависимости от компонентов Windows, на данный момент
создавать приложения на WPF можно только под ОС Windows.
Архитектура WPF
Схематически архитектуру WPF можно представить следующим образом:
Как видно на схеме, WPF разбивается на два уровня: managed API и unmanaged API (уровень интеграции с DirectX).
Managed API (управляемый API-интерфейс) содержит код, исполняемый под управлением общеязыковой среды выполнения .NET – Common Language Runtime.
Этот API описывает основной функционал платформы WPF и состоит из следующих компонентов:
-
PresentationFramework.dll: содержит все основные реализации компонентов и элементов управления, которые можно использовать при
построении графического интерфейса -
PresentationCore.dll: содержит все базовые типы для большинства классов из PresentationFramework.dll
-
WindowsBase.dll: содержит ряд вспомогательных классов, которые применяются в WPF, но могут также использоваться и вне данной платформы
Unmanaged API используется для интеграции вышележащего уровня с DirectX:
-
milcore.dll: собственно обеспечивает интеграцию компонентов WPF с DirectX. Данный компонент написан на неуправляемом коде
(С/С++) для взаимодействия с DirectX. -
WindowsCodecs.dll: библиотека, которая предоставляет низкоуровневую поддержку для изображений в WPF
Еще ниже собственно находятся компоненты операционной системы и DirectX, которые произвоят визуализацию компонентов приложения, либо выполняют прочую низкоуровневую обработку.
В частности, с помощью низкоуровневого интерфейса Direct3D, который входит в состав DirectX, происходит трансляция
Здесь также на одном уровне находится библиотека user32.dll. И хотя выше говорилось, что WPF не использует эту библиотеку
для рендеринга и визуализации, однако для ряда вычислительных задач (не включающих визуализацию) данная библиотека продолжает использоваться.