Windows Presentation Foundation (WPF) представляет собой обширный API-интерфейс для создания настольных графических программ имеющих насыщенный дизайн и интерактивность. В отличие от устаревшей технологии Windows Forms, WPF включает новую модель построения пользовательских приложений (в основе WPF лежит мощная инфраструктура, основанная на DirectX).
Это означает возможность применения развитых графических эффектов, не платя за это производительностью, как это было в Windows Forms. Фактически даже становятся доступными такие расширенные средства, как поддержка видеофайлов и трехмерное содержимое. Используя эти средства (при наличии хорошего инструмента графического дизайна), можно создавать бросающиеся в глаза пользовательские интерфейсы и визуальные эффекты, которые были просто невозможны в Windows Forms.
В данном разделе описываются базовые понятия и возможности WPF, такие как XAML, базовая компоновка приложений, свойства зависимости (одна из ключевых концепций WPF) и рассматриваются примеры маршрутизируемых событий. Приводятся преимущества использования данной платформы, по сравнению с классическими приложениями Windows Forms.
Рассматривается использование привязки данных и затем дальнейшее их форматирование, описывается использование команд, ресурсов, стилей и поведений.
Описание построения базовых линий и фигур, использование трансформаций элементов, создание нестандартных текстур в виде пользовательских кистей, члены классов Geometry и Drawing. Так же приводятся основы эффектов и анимации.
В данном разделе описывается роль шаблона элемента управления по умолчанию и программное взаимодействие с ним во время выполнения. Так же рассказывается про построение пользовательских элементов управления с помощью Visual Studio 2010 и Expression Blend 4.
Построение потоковых и фиксированных документов, настройка печати, печать XPS, модель дополнений и развертывание приложений WPF, описание паттернов MVP, MVC и MVVM. Также приводится введение в разработку Metro-приложений под Windows 8 на C# и XAML.
WPF 4
Нововведения в WPF 4
Я напишу отдельную статью, которая опишет важные изменения, которые грядут в WPF и Silverlight конструкторах в VS 2010.
Элементы управления
Элементы управления для построения богатых приложений
WPF 4 добавляет разнообразные элементы управления, чтобы создавать бизнес-приложения еще быстрее и проще. Новый, богатый набор элементов управления включает такие LOB-необходимые элементы управления, как DataGrid, DatePicker и Calendar. Данные новые элементы управления на 99% поведенчески и API совместимые с их Silverlight аналогами, позволяя разработчику создавать совместимые веб- и клиентские приложения, оптимизируя технологический процесс благодаря повторному использованию Silverlight и WPF кода.
Мы также выпускаем набор из восьми элементов управления, называемый «WPF Bag O’ Tricks». Набор включает в себя: AnimatingTilePanel, ColorPicker, InfoTextBox, ListPager, NumericUpDown, Reveal, TransitionsPresenter, TreeMapPanel.
Windows 7 и элемент управления Office Ribbon
Новый WPF элемент управления Ribbon будет доступен, почти сразу, после релиза WPF 4. Он поддерживает все стандартные возможности, с которыми знаком конечный пользователь: закладки и группы, динамическое изменение размеров, панель быстрого доступа, меню приложения, закладками, зависящими от контекста, горячими клавишами и многое другое.
WPF версия Ribbon будет обладать полноценной расширяемостью для соответствия изменениям в руководстве в следующих релизах. Ограниченная CTP версия доступна уже сегодня.
Графика
Кэшированное построение приложений
Огромный выигрыш в производительности возможен с новой возможностью WPF4 — Cached Composition, которая позволяет приложениям кэшировать произвольные содержимое, включая «живые» и полностью интерактивные элементы управления, векторную геометрию, растровые изображения, хранящиеся в видео памяти и т.п. Поместив единожды элементы в кэш, он могут быть произвольно преобразованы, анимированы, управляемы, к ним можно применить Effects, без нужды перерисовывать закэшированные элементы.
Все это приводит к сбережени CPU и GPU от перерисовки содержимого и позволяет GPU перерисовывать напрямую из кэша. Кэш понимает «грязные» области, поэтому мигающй курсор в закэшированном текстовом блоке, например, должен будет перерисовать только курсор между фреймами. Появилась даже новая кисть, которая использует «умный» кэш, фактически это VisualBrush с улучшенной производительностью.
Поддержка третьих пиксельных шейдеров
WPF основан на поддержке популярного ShaderEffect, впервые представленного в WPF 3.5 SP1, который позволяет создавать эффекты, используя пиксельные шейдеры 3-ей версии. PS 3.0 более сложный, чем PS 2.0, что дает возможность создавать неотразимые эффекты на поддерживаемом оборудовании.
WPF 4 переняла свойство UseLayoutRounding, представленное в Silverlight 2. Движок макета зачастую рассчитывает подпиксельные координаты расположения. Это приводит к артефактам при прорисовке, когда элемент расположен на стыке подпиксельных границ и сглажен над несколькими физическими пикселями.
UseLayoutRounding заставит движок макета располагать элементы по всем границам пикселя, следовательно, убирая большинство артефактов прорисовки, вызванной данной проблемой, что позволяет создавать чистый и чёткий UI по умолчанию.
Функции для облегчения анимации
Дискретная, линейная и сплайновая анимация уже поддерживается предыдущими версиями WPF. WPF 4 представляет новый концепт «Easing Functions», которые позволяют разработчикам создавать различную анимацию. Например, пружинистые движения или добавить упреждение в анимацию. Функции упрощения (Easing Functions) определяют способ анимации от начала и до конца. Встроенные функции упрощения предоставляют спектр режимов в анимации: круговой, экспоненциальной, эластичной и пружинистой. Функции упрощения спроектированы легко расширяемыми, позволяя разработчикам создавать собственные. Благодаря данному нововведения, дизайнеры могут без усилий создавать плавную и органичную анимацию.
Новое добавленное свойство CleartypeHint позволяет разработчикам приложений включить высококачественную прорисовку Cleartype текста, когда во многих ситуациях он был заранее отключен. Такие ситуации включают в себя текст в наслоившихся окнах, текст в VisualBrush, DrawingBrush, BitmapCacheBrush и везде, где представление промежуточной прорисовки будет предыдущим результатом в черно-белом тексте.
Текстовый стек
Новый стек для прорисовки текста
WPF стек для прорисовки текста был полностью заменен, изменение, которое приводит к существенным усовершенствованиям в чёткости прорисовки текста, способности к изменению настроек и поддержки международных языков. Данный новый текстовый стек поддерживает оптимизированный символьный слой, чтобы показывать текст с сопоставимой резкостью текста в Win32/GDI:
Так же новый стек поддерживает явно выбираемые режимы прорисовки текста: aliased, grayscale, ClearType.
Новый текстовый стек позволяет оптимизировать текстовую привязку для анимации и статики. Вдобавок, новый текстовый стек поддерживает шрифты с встроенными картами изображений, что позволяет многим восточно-азиатским шрифтам прорисовываться с чёткостью, к которой привыкли пользователи Win32.
С выпуском WPF, Run.Text был простым CLR-свойством. Это значит, что Run.Text испытывает недостаток во всех преимуществах системы зависимостей свойств в WPF, самое значительное из которых — привязка. В WPF 4 мы конвертировали Run.Text в зависимое свойство, позволяющее разработчикам впервые использовать, привязанный к данным, Run. Больше информации об этом тут.
WPF включает в себя проверку орфографии, которая до 4-ой версии использовала словари предоставляемые ОС. Это было большой проблемой для приложений, которые используют специфическую терминологию, данные приложения надоедали постоянными уведомлениями о неправильном написании. WPF 4 представляет API, которое позволяет приложениям добавлять слова в словари, используемые WPF для проверки орфографии. Более подробно об этом тут.
Кисть выделения и каретки
В порыве разрешить разработчикам настраивать богатый вид WPF приложений, теперь вы можете изменить кисть для выделения текста и каретки через два простых свойства — SelectionBrush и CaretBrush:
Windows 7
Интеграция 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.
WPF представил виртуализированне элементы управления в предыдущих версиях. Тем не менее, не было стандартизированного способа для клиента автоматизации взаимодействия с виртуализированным элементом управления. В WPF 4 было добавлено два новых шаблона для элементов управления — ItemsContainerPattern и VirtualizedItemPattern, для поддержки доступа и взаимодействия с виртуализированными элементами. ItemsContainerPattern используется для получения доступа к виртуализированным элементам управления и для поиска виртуализированного элемента, а VirtualizedItemPattern для реализации виртуализированных элементов.
Это еще один UIA шаблон проектирования элемента управления, добавленные в WPF 4. Данный шаблон используется клиентами автоматизации, чтобы отслеживать направление заданных событий ввода в корректный элемент WPF фреймворком. Данный шаблон имеет три события автоматизации: InputReachedTargetEvent, InputReachedOtherElementEvent и InputDiscardedEvent, чтобы сообщать, обработан ли ввод.
Развертывание
.NET Framework 4 Client Profile
Вы можете просматривать и изменять версию фреймворка, на которую ориентируетесь разработке, открыв свойства проекта, а далее выбрав закладку «Application». Далее выбрать в выпадающем списке “Target framework” полную версию или Client Profile. В «Publish» свойствах проекта вы также можете выбрать необходимую версию для ClickOnce развертывания. В Beta2, VS2010 автоматически выбирает правильный профиль, в зависимости от вашей первичной направленности проекта:
Тоже самое диалоговое окно вы увидите при создании “Setup and Deployment” проекта (“Add New Project”/“Other Project Types”). NET4 Client Profile выделен в списке по умолчанию.
Если вы установили полную версию фреймворка, вы можете переключится на Client Profile, удалив «Extended»
Full trust развертывание XBAP приложений
Начиная с WPF 4, запрос на поднятие привилегий ClickOnce также включен для XAML Browser Applications (XBAPs) для интранет и доверительных зон, делая резвертывание еще проще для full-trust XBAP приложений. Для тех приложений, которые требуют повышенных прав безопасности, чем у минимальных прав доступа кода (CAS), пользователь должен выбрать «Запуск» при запросе поднятия привилегий ClickOnce, для запуска XBAP с требуемыми правами.
Учебник. Создание простого приложения на C#
При изучении этого руководства вы ознакомитесь со многими инструментами, диалоговыми окнами и конструкторами, которые можно использовать для разработки приложений в Visual Studio. Вам предстоит создать простое приложение «Hello, World», разработать пользовательский интерфейс, добавить код и выполнить отладку, одновременно приобретая навыки работы в интегрированной среде разработки (IDE).
Предварительные требования
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Настройка интегрированной среды разработки (IDE)
При первом открытии Visual Studio вам будет предложено выполнить вход. Для целей этого руководства это необязательно. Затем может появиться диалоговое окно, в котором предлагается выбрать параметры разработки и цветовую тему. Оставьте значения по умолчанию и нажмите Запуск Visual Studio.
При запуске Visual Studio сначала открывается начальное окно. Выберите Продолжить без кода, чтобы открыть среду разработки. Вы увидите окна инструментов, меню и панели инструментов, а также основную область окна. Окна инструментов закреплены в левой и правой частях окна приложения. Поле поиска, строка меню и стандартная панель инструментов закреплены в верхней части. При загрузке решения или проекта редакторы и конструкторы отображаются в центральной области окна приложения. При разработке приложения чаще всего используется именно эта область.
Создание проекта
При создании приложения в Visual Studio необходимо сначала создать проект и решение. Этот пример демонстрирует создание проекта Windows Presentation Foundation (WPF).
Создайте новый проект. В строке меню выберите Файл > Новый > Проект.
В диалоговом окне Новый проект выберите категорию Установленные > Visual C# > Рабочий стол Windows, а затем выберите шаблон Приложения WPF (.NET Framework). Присвойте проекту имя HelloWPFApp и щелкните ОК.
Запустите Visual Studio.
На начальном экране выберите Создать проект.
На экране Создание проекта выполните поиск по запросу «WPF», выберите в результатах Приложение WPF и нажмите кнопку Далее.
На следующем экране присвойте проекту имя HelloWPFApp и щелкните Далее.
В окне Дополнительные сведения для целевой платформы должна быть указана версия .NET Core 3.1. Если это не так, выберите .NET Core 3.1. Затем нажмите Создать.
Visual Studio создает решение и проект HelloWPFApp, а в обозревателе решений выводятся различные файлы. Конструктор WPF отображает представление кода и представление XAML MainWindow.xaml в представлении с разделением. Сдвигая разделитель, можно делать любое из представлений больше или меньше. Можно выбрать для просмотра только визуальное представление или только представление XAML.
Дополнительные сведения о XAML (eXtensible Application Markup Language) см. в обзоре XAML для WPF.
После создания проекта его можно настраивать. Для этого выберите Окно свойств в меню Представление или нажмите клавишу F4. Затем можно отображать и изменять параметры элементов проекта, элементов управления и других элементов в приложении.
Запустите Visual Studio.
На начальном экране выберите Создать проект.
На экране Создание проекта выполните поиск по запросу «WPF», выберите в результатах Приложение WPF и нажмите кнопку Далее.
На следующем экране присвойте проекту имя HelloWPFApp и щелкните Далее.
В окне Дополнительные сведения для целевой платформы должна быть указана версия .NET 6.0. Если это не так, выберите .NET 6.0. Затем нажмите Создать.
Visual Studio создает решение и проект HelloWPFApp, а в обозревателе решений выводятся различные файлы. Конструктор WPF отображает представление кода и представление XAML MainWindow.xaml в представлении с разделением. Сдвигая разделитель, можно делать любое из представлений больше или меньше. Можно выбрать для просмотра только визуальное представление или только представление XAML.
Дополнительные сведения о XAML (eXtensible Application Markup Language) см. в обзоре XAML для WPF.
После создания проекта его можно настраивать. Для этого выберите Окно свойств в меню Представление или нажмите клавишу F4. Затем можно отображать и изменять параметры элементов проекта, элементов управления и других элементов в приложении.
Изменение имени MainWindow.xaml
Давайте присвоим файлу MainWindow более конкретное имя. В обозревателе решений щелкните правой кнопкой мыши файл MainWindow.xaml и выберите команду Переименовать. Измените имя файла на Greetings.xaml.
Конструирование пользовательского интерфейса (ИП)
Если конструктор не открыт, выберите файл Greetings.xaml и нажмите клавиши SHIFT+F7, чтобы открыть его.
В приложение будут добавлены элементы управления трех типов: элемент управления TextBlock, два элемента управления RadioButton и элемент управления Button.
Добавление элемента управления TextBlock
Нажмите клавиши CTRL+Q для активации поля поиска и введите Панель элементов. Выберите в списке результатов Представление > Панель элементов.
В окне Панель элементов разверните узел Типовые элементы управления WPF, чтобы увидеть элемент управления TextBlock.
Добавьте элемент управления TextBlock в область конструктора, выбрав элемент управления TextBlock и перетащив его в окно. Отцентрируйте этот элемент в верхней части окна. В Visual Studio 2019 и более поздних версиях для выравнивания элемента управления по центру можно использовать красные направляющие.
Окно должно выглядеть так, как показано на следующем рисунке:
Разметка XAML должна выглядеть приблизительно так, как в следующем примере:
Нажмите клавиши CTRL+Q для активации поля поиска и введите Панель элементов. Выберите в списке результатов Представление > Панель элементов.
В окне Панель элементов разверните узел Типовые элементы управления WPF, чтобы увидеть элемент управления TextBlock.
Добавьте элемент управления TextBlock в область конструктора, выбрав элемент управления TextBlock и перетащив его в окно. Отцентрируйте этот элемент в верхней части окна. Ориентируйтесь на рекомендации, чтобы отцентрировать элемент управления.
Окно должно выглядеть так, как показано на следующем рисунке.
Разметка XAML должна выглядеть приблизительно так, как в следующем примере:
Настройка текста в текстовом блоке
Разметка XAML должна выглядеть приблизительно так, как в следующем примере:
При необходимости снова разместите элемент TextBlock по центру и сохраните изменения сочетанием клавиш CTRL+S или с помощью пункта меню Файл.
Следующий шаг — добавить в форму два элемента управления RadioButton.
Добавление переключателей
На панели элементов найдите элемент управления RadioButton.
Добавьте два элемента управления RadioButton в область конструктора, выбрав элемент RadioButton и перетащив его в область конструктора. Переместите кнопки (выбрав их и используя клавиши со стрелками), чтобы кнопки отображались рядом под элементом управления TextBlock. Используйте красные направляющие для выравнивания элемента управления.
Окно должно выглядеть следующим образом:
Теперь вы добавите отображаемый текст для каждого элемента управления RadioButton. Следующая процедура обновляет свойство Content элемента управления RadioButton.
На панели элементов найдите элемент управления RadioButton.
Добавьте два элемента управления RadioButton в область конструктора, выбрав элемент RadioButton и перетащив его в область конструктора. Переместите кнопки (выбрав их и используя клавиши со стрелками), чтобы кнопки отображались рядом под элементом управления TextBlock. Для выравнивания элементов управления можно использовать инструкции.
Окно должно выглядеть следующим образом:
Теперь вы добавите отображаемый текст для каждого элемента управления RadioButton. Следующая процедура обновляет свойство Content элемента управления RadioButton.
Добавление отображаемого текста для каждого переключателя
Измените атрибут Content для кнопок HelloButton и GoodbyeButton на «Hello» и «Goodbye» в XAML. Разметка XAML теперь должна выглядеть следующим образом:
Задание переключателя, выбранного по умолчанию
На этом этапе мы настроим элемент HelloButton как выбранный по умолчанию, чтобы всегда был выбран один из переключателей.
В представлении XAML найдите разметку для элемента HelloButton.
Разметка XAML теперь должна выглядеть следующим образом:
Последний элемент пользовательского интерфейса, который вам предстоит добавить, — это Button.
Добавление элемента управления Button
На панели элементов найдите элемент управления Button и добавьте его в область конструктора под элементами управления RadioButton, перетащив его на форму в представлении конструирования. Если вы используете Visual Studio 2019 или более позднюю версию, выровнять элемент управления по центру можно с помощью красной линии.
В представлении XAML измените значение свойства Содержимое элемента управления Button с Content=»Button» на Content=»Display» и сохраните изменения.
Окно должно выглядеть так, как показано на следующем рисунке.
Разметка XAML теперь должна выглядеть следующим образом:
На панели элементов найдите элемент управления Button и добавьте его в область конструктора под элементами управления RadioButton, перетащив его на форму в представлении конструирования. Ориентируйтесь на инструкции, чтобы отцентрировать элемент управления.
В представлении XAML измените значение свойства Содержимое элемента управления Button с Content=»Button» на Content=»Display» и сохраните изменения.
Окно должно выглядеть так, как показано на следующем снимке экрана.
Разметка XAML теперь должна выглядеть следующим образом:
Добавление кода к кнопке Display
После запуска приложения окно сообщения появится только тогда, когда пользователь выберет переключатель, а затем нажмет кнопку Display. Одно окно сообщения появится для Hello, и другое — для Goodbye. Чтобы задать такое поведение, добавьте код в событие Button_Click в файле Greetings.xaml.cs.
Введите следующий код:
После запуска приложения окно сообщения появится только тогда, когда пользователь выберет переключатель, а затем нажмет кнопку Display. Одно окно сообщения появится для Hello, и другое — для Goodbye. Чтобы задать такое поведение, добавьте код в событие Button_Click в файле Greetings.xaml.cs.
Введите следующий код:
Отладка и тестирование приложения
После этого вам предстоит отладить приложение для выявления ошибок и тестирования того, что оба окна сообщений отображаются правильно. Приведенные ниже инструкции описывают, как выполнить сборку и запустить отладчик (дополнительные сведения см. в разделах Построение приложения WPF и Отладка WPF).
Поиск и исправление ошибок
В этом шаге вам предстоит найти ошибку, которую мы намеренно допустили ранее, изменив имя файла MainWindow.xaml.
Начало отладки и поиск ошибки
Запустите отладчик, нажав клавишу F5 или выбрав пункты меню Отладка и Начать отладку.
Появится окно Режим приостановки выполнения, а в окне Вывод будет указано, что произошло исключение IOException: «Не удается найти ресурс mainwindow.xaml».
Остановите отладчик, выбрав Отладка > Остановить отладку.
Мы переименовали MainWindow.xaml в Greetings.xaml в начале этого руководства, но код приложения по-прежнему ссылается на MainWindow.xaml как универсальный код ресурса (URI), поэтому проект не может быть запущен.
Запустите отладчик, нажав клавишу F5 или выбрав пункты меню Отладка и Начать отладку.
Появится окно Режим приостановки выполнения, а в окне Вывод будет указано, что произошло исключение IOException: «Не удается найти ресурс mainwindow.xaml».
Остановите отладчик, выбрав Отладка > Остановить отладку.
Мы переименовали MainWindow.xaml в Greetings.xaml в начале этого руководства, но код приложения по-прежнему ссылается на MainWindow.xaml как универсальный код ресурса (URI), поэтому проект не может быть запущен.
Задание Greetings.xaml в качестве начального универсального кода ресурса (URI)
В обозревателе решений откройте файл App.xaml.
Измените StartupUri=»MainWindow.xaml» на StartupUri=»Greetings.xaml» и сохраните изменения.
Как дополнительный шаг это позволит избежать путаницы при изменении заголовка окна приложения в соответствии с новым именем.
В Обозревателе решений откройте файл Greetings.xaml, который вы только что переименовали.
Измените значение свойства Window.Title с Title=»MainWindow» на Title=»Greetings» и сохраните изменения.
Запустите отладчик снова (клавишей F5). Должно появиться окно приветствия приложения.
Теперь закройте окно приложения, чтобы остановить отладку.
Отладка с точками останова
Добавив точки останова, можно тестировать код во время отладки. Точки останова можно добавлять, выбирая в меню Отладка > Точка останова, щелкая в левом поле редактора рядом со строкой кода, в которой требуется приостановить выполнение, или нажимая клавишу F9.
Добавление точек останова
Добавьте точку останова, выбрав меню Отладка, затем — Точка останова.
Рядом со строкой кода в крайнем левом поле окна редактора появится красный кружок.
Нажмите клавишу F9, чтобы добавить точку останова, а затем нажмите клавишу F5, чтобы начать отладку.
Строка MessageBox.Show(«Hello.») выделяется желтым цветом. В нижней части интегрированной среды разработки слева закреплены окна «Видимые», «Локальные» и «Контрольные значения», а справа — окна «Стек вызовов», «Точки останова», «Параметры исключений», «Команда», «Интерпретация» и «Вывод».
В строке меню выберите Отладка > Шаг с выходом.
Приложение возобновит выполнение, и появится окно сообщения со словом «Hello».
Нажмите кнопку ОК в окне сообщения, чтобы закрыть его.
Строка MessageBox.Show(«Goodbye.») выделяется желтым цветом.
Закройте окно приложения, чтобы остановить отладку.
В строке меню выберите Отладка > Выключить все точки останова.
Добавьте точку останова, выбрав меню Отладка, затем — Точка останова.
Рядом со строкой кода в крайнем левом поле окна редактора появится красный кружок.
Нажмите клавишу F9, чтобы добавить точку останова, а затем нажмите клавишу F5, чтобы начать отладку.
Строка MessageBox.Show(«Hello.») выделяется желтым цветом. В нижней части интегрированной среды разработки слева закреплены окна «Видимые», «Локальные» и «Контрольные значения», а справа — окна «Стек вызовов», «Точки останова», «Параметры исключений», «Команда», «Интерпретация» и «Вывод».
В строке меню выберите Отладка > Шаг с выходом.
Приложение возобновит выполнение, и появится окно сообщения со словом «Hello».
Нажмите кнопку ОК в окне сообщения, чтобы закрыть его.
Строка MessageBox.Show(«Goodbye.») выделяется желтым цветом.
Закройте окно приложения, чтобы остановить отладку.
В строке меню выберите Отладка > Выключить все точки останова.
Просмотр представления элементов пользовательского интерфейса
В работающем приложении в верхней части окна должно отображаться мини-приложение. Мини-приложение — это вспомогательное средство времени выполнения, обеспечивающее быстрый доступ к некоторым полезным возможностям отладки. Нажмите первую кнопку, Перейти к динамическому визуальному дереву. Должно отобразиться окно с деревом, содержащим все визуальные элементы страницы. Разверните узлы, чтобы найти добавленные кнопки.
Сборка окончательной версии приложения
Теперь, когда вы проверили, что все работает, можно подготовить окончательную сборку приложения.
Выберите в главном меню Сборка > Очистить решение для удаления промежуточных файлов и выходных файлов, которые были созданы в ходе предыдущих сборок. Этот шаг не является обязательным, но позволяет очистить результаты отладочной сборки.
Измените конфигурацию сборки для HelloWPFApp с Отладка на Выпуск с помощью раскрывающегося списка на панели инструментов (сейчас это «Отладка»).
Выполните сборку решения, выбрав Сборка > Собрать решение.
Поздравляем с завершением этого учебника! Построенный файл .exe находится в каталоге решения и проекта ( . \HelloWPFApp\HelloWPFApp\bin\Release).
Следующие шаги
Поздравляем с завершением этого учебника! Для получения дополнительных сведений перейдите к следующим руководствам.