Windows не поддерживается в проекте Windows Presentation Foundation wpf

Обновлено: 01.07.2024

Два типа документов, поддерживаемых Windows Presentation Foundation (WPF), — это формат Flow и документ фиксированного формата. Документ нефиксированного формата изменяет содержимое в соответствии с размером экрана, в то время как документ фиксированного формата представляет содержимое независимо от размера экрана.

<р>3. Назовите пространство имен, необходимое для работы с 3D.

Для работы в 3D требуется пространство имен System.Windows.Media.Medi3D.

<р>4. Правильно ли говорить, что WPF заменил DirectX?

Нет, WPF никогда не сможет заменить DirectX. WPF нельзя использовать для создания игр с потрясающей графикой. WPF предназначен для замены формы Windows, а не DirectX.

<р>5. Что такое свойства зависимости?

Свойства, которые принадлежат определенному классу, но могут использоваться для другого, называются свойствами зависимости.

<р>6. Как можно пропорционально увеличить размер StatusBar?

Заменяя атрибут ItemsPanel в StatusBar сеткой. Столбцы сетки можно соответствующим образом настроить для получения желаемого результата.

<р>7. Что такое Freezable объекты в WPF?

Объект, состояние которого заблокировано и не может быть изменен, называется замораживаемым объектом. Такие объекты работают лучше. Также безопаснее, если они должны быть разделены между потоками.

<р>8. Почему WPF предпочтительнее Adobe Flash?

WPF — это более новая технология, поэтому в ней используются новейшие инструменты разработки. Он поддерживает более широкий спектр языков программирования и обеспечивает надежное повторное использование элементов управления.

9. Чем Silverlight отличается от браузерного приложения WPF?

<р>10. Назовите методы, представленные в DependencyObject.

Он имеет три объекта, а именно:

  • Установить значение
  • Очистить значение
  • Получить значение
<р>11. Напишите о ПРИЗМЕ.

PRISM — это платформа для создания сложных приложений для WPF, Silverlight или Windows Phone. PRISM использует MVVM, IC, шаблоны команд, DI и разделение проблем, чтобы получить слабую связь.

<р>12. Можно ли использовать Windows Forms в приложении WPF?

Да, форму Windows можно использовать в WPF. Форма Windows может отображаться как всплывающее окно WPF. Элементы управления этой формы окна можно разместить на странице WPF помимо элементов управления WPF, используя функции предустановленного элемента управления WindowsFormsHost.

<р>13. Кратко опишите CustomControl.

CustomControl расширяет функции существующих элементов управления. Он состоит из стиля по умолчанию в Themes/Generic.xaml и файла кода. Это лучший способ создать библиотеку элементов управления, а также для нее можно использовать стили или шаблоны.

14. Назовите распространенные сборки, используемые в WPF?

  • Основа презентации
  • WindowsBase
  • Основные презентации
<р>15. Определить анимацию пути в WPF

Анимация пути — это тип анимации, в котором анимированный объект движется по пути, заданному геометрией пути.

<р>16. Можно ли создавать приложения WPF без XAML?

Да, приложения WPF можно создавать без XAML, поскольку использование XAML в WPF является вопросом выбора.

17. Какие есть типы окон в WPF?

WPF имеет три типа окон:

  • Обычное окно
  • Окно страницы
  • Навигация по окну
<р>18. Как можно отсортировать элементы в ListBox?

Например, этот код сортирует элементы ContentControl на основе их свойства количества слов:

myItemsControl.Items.SortDescriptions.Add(new SortDescription("WordCount", ListSortDirection.Descending));

<р>19. Чем MVVM отличается от MVC?

MVC означает контроллер модели-представления, а MVVM означает модель-представление модели.

В MVVM вместо контроллера используется модель представления. Эта модель представления находится под уровнем пользовательского интерфейса. Он показывает объекты команд и данные, которые требуются для представления. Он действует как объект-контейнер, из которого представление получает свои действия и данные.

<р>20. Объясните перенаправленные события в WPF.

Событие, которое может вызывать обработчики более чем одного слушателя, присутствующего в дереве элементов, вместо одного объекта, вызвавшего событие, называется маршрутизированным событием.

21. Как System.Windows.Media.Visual dll используется в WPF?

Он используется всякий раз, когда возникает потребность в создании пользовательского интерфейса. Это объект рисования, который дает инструкции по созданию объекта. Эти инструкции включают непрозрачность и т. д. рисунка. Класс Visual также объединяет функции управляемых классов WPF и MilCore.dll.

22. Что такое различные панели макета в WPF?

  • Панель стека
  • Панель сетки
  • Панель холста
  • Закрепить панель
  • Обтекание панели

23. Назовите важные подсистемы в WPF

  • Windows.Controls.Control
  • Windows.DependancyObject
  • Windows.FrameworkElement
  • Windows.Media.Visuals
  • Объект
  • Потоки.ДиспетчерОбъект
  • Windows.UIElement

24. Что означает BAML в WPF?

BAML – это сокращение от Binary Application Markup Language. Это не что иное, как XAML, который был токенизирован, проанализирован и преобразован в двоичную форму. BAML — это сжатый декларативный язык, который загружается и анализируется быстрее, чем XAML.

25. В чем разница между элементами управления страницы и окна в WPF?

Основное отличие заключается в том, что управление окнами доминирует над приложением Windows, а управление страницами — над размещенными приложениями браузера. Кроме того, элемент управления "Окно" может содержать элемент управления "Страница", но обратное произойти не может.

26. Что такое прикрепленные свойства в WPF?

Присоединенные свойства — это, по сути, свойства зависимостей, которые позволяют прикреплять значение к любому произвольному объекту.

27. Что такое интерфейс INotifyPropertyChanged?

InotifyPropertyChanged уведомляет клиентов, обычно тех, кто выполняет привязку, если значение свойства изменяется. У него есть событие PropertyChanged, которое вызывается каждый раз при изменении свойства объекта Model.

28. В чем основное различие между событиями и командами в модели MVVM?

Команды более эффективны, и их лучше использовать вместо событий. Действия тесно связаны с источником события, поэтому события нельзя легко использовать повторно. Но команды позволяют эффективно поддерживать несколько действий в одном месте, а затем повторно использовать их в соответствии с нашими требованиями.

29. Как можно принудительно закрыть всплывающую подсказку, которая в данный момент видна?

Его можно закрыть, установив для свойства IsOpen всплывающей подсказки значение false.

<р>30. Напишите различия между DynamicResource и StaticResource.

Основное отличие состоит в том, что StaticResource оценивает ресурс только один раз, а DynamicResource оценивает его каждый раз, когда ресурс требуется. И по этой причине DyanamicResource загружает систему, но ускоряет загрузку страниц или окон

31. Объясните шаблон MVVM.

Шаблон MVVM делит код пользовательского интерфейса на 3 основные части:

  • Модель. Представляет собой набор классов, содержащих данные, полученные из баз данных.
  • Вид – это код, соответствующий визуальному представлению данных.
  • ViewModel — это слой, который связывает представление и модель вместе. Он представляет эти данные в форме, которую легко понять. Он также определяет, как View взаимодействует с приложением.

32. Зачем нужны панели макета в WPF?

Панели макета необходимы для того, чтобы элементы управления подходили для экранов разного размера или с разным размером шрифта. Если мы расставим элементы управления по фиксированным координатам пикселя, то эта модель даст сбой при перемещении в другую среду. По этой причине необходимы панели макета.

33. Кратко напишите о UserControl.

UserControl объединяет существующие элементы управления в одну группу многократного использования. Он содержит файл XAML и код. Пользовательский элемент управления не может быть оформлен в стиле или создан по шаблону.

34. Как определить, является ли объект Freezable замороженным?

Свойство объекта "IsFrozen" можно использовать для определения того, заморожен ли замораживаемый объект.

35. Что такое единица измерения в WPF?

Все измерения выполняются в аппаратно-независимых пикселях или логических пикселях. Один пиксель равен 1/96 части дюйма. Эти логические пиксели всегда упоминаются как двойные, что позволяет им также иметь дробное значение.

36. Что такое украшение?

Это особый тип FrameworkElement, предоставляющий пользователю визуальные подсказки. Они также используются для добавления дескрипторов к элементам и предоставления информации о состоянии элемента управления. Декоративные элементы привязаны к элементу UIElement и визуализируются на поверхности, расположенной над украшаемым элементом. Эта поверхность называется AdornerLayer. Декоративные элементы в основном размещаются относительно ограниченного элемента.

37. Объясните сериализацию?

Это процесс преобразования состояния объекта в поток байтов.

38. Поддерживается ли MDI в WPF?

MDI не поддерживается в WPF. UserControl можно использовать для предоставления той же функциональности, что и MDI.

39. Что такое XBAP?

40. В чем сходство WPF и Silverlight?

Silverlight и WPF похожи в том смысле, что они оба используют XAML и используют один и тот же код, синтаксис и библиотеки.

41. Как сделать так, чтобы всплывающая подсказка появлялась при наведении курсора на отключенный элемент?

Для этой цели можно использовать свойство ShowOnDisabled. Он принадлежит классу ToolTipService.

42. Как заставить ListBox плавно прокручиваться?

По умолчанию ListBox настроен на поэлементную прокрутку. Это зависит от высоты каждого элемента и действия прокрутки, что создает грубое ощущение. Лучший способ — настроить действие прокрутки так, чтобы оно сдвигало элементы на несколько пикселей независимо от их высоты. Это делается путем установки ScrollViewer.Свойство CanContentScroll в «false». Однако это приведет к тому, что ListBox потеряет свойство виртуализации.

43. С чего начинается выполнение в приложении WPF?

Приложения WPF, созданные в Visual Studio, выполняются без метода Main. Это связано с тем, что приложения имеют особый регистр, когда они компилируются из XAML. Это означает, что Visual Studio прикрепляет действие сборки ApplicationDefinition к XAML-файлу. Это приводит к автоматической генерации метода Main.

44. Можно ли создать службу Windows с помощью WPF?

Нет, службы Windows нельзя создать с помощью WPF. WPF — это язык представления. Службам Windows требуются определенные разрешения для выполнения некоторых функций, связанных с графическим интерфейсом. Поэтому, если он не получает необходимых разрешений, он выдает ошибки.

45. Какие существуют виды маршрутизируемых событий в WPF?

  • Прямая — это событие может быть вызвано только тем элементом, в котором оно было создано.
  • Туннелирование. Сначала это событие вызывается элементом, в котором оно было создано, а затем оно вызывается каждым последующим контейнером в визуальном дереве.
  • Всплывание — это событие сначала вызывается самым верхним контейнером в визуальном дереве, а затем вызывается каждым последовательным контейнером, лежащим ниже самого верхнего, пока не достигнет элемента, в котором оно было создано.

46. Почему лучше заключать элементы в ComboBoxItem?

У него есть некоторые важные свойства, такие как IsSelected и IsHighlighted, а также некоторые необходимые события, такие как Selected и Unselected. ComboBoxItem — это элемент управления содержимым, поэтому он очень удобен для добавления простых строк в ComboBox.

47. Как получить идентификаторы автоматизации элементов в ItemsControl?

Лучший способ сделать это – установить свойство Name, так как оно по умолчанию используется для целей автоматизации. Но если вам требуется присвоить элементу идентификатор, отличный от его имени, то свойство AutomationProperties.AutomationID можно установить в соответствии с необходимостью.

48. Как можно получить аргументы командной строки в приложении WPF?

Наиболее предпочтительным методом для этого является вызов System.Environment.GetCommandLineArgs в любой произвольной точке приложения.

49. Укажите название классов, содержащих произвольное содержимое.

<р>50. В каком NameSpace есть элементы управления Popup и Thumb?

Пространство имен system.windows.controls.primitives содержит элементы управления Popup и Thumb.

51) Объясните, что такое XAML? В чем разница между XML и XAML?

52) Расскажите о преимуществах использования XAML?

Преимущество использования XAML

  • Код XAML легко читается, и они короткие
  • Разделение кода конструктора и логики
  • Для таких инструментов, как сочетание выражений, используемых для графического дизайна, требуется XAML в качестве исходного кода.
  • Он четко разделяет роли дизайнера и разработчика.

53) Как написать код для отображения «Hello World» в XAML?

Отображается «Hello World».

54) Как в XAML указываются графические компоненты?

В XAML графические компоненты указываются с помощью открытых или закрытых тегов с атрибутами.

55) Что такое синтаксис атрибутов в XAML?

В XAML синтаксис атрибута задает значение свойства или называет обработчик события для события путем объявления атрибута элемента. Значение атрибута должно быть заключено в две кавычки (").

XAML

56) Объяснить свойства содержимого XAML?

XAML представляет собой языковую функцию, благодаря которой класс может выделять ровно одно из своих свойств в качестве свойства XAML

57) Объясните, что такое расширение разметки в XAML?

Расширения разметки — это заполнители в XAML, которые используются для разрешения свойства во время выполнения. Расширение разметки позволяет вам расширять XAML, и с помощью синтаксиса атрибутов вы также можете установить любое свойство, которое можно установить в XAML. Целью расширения разметки является обработка строки и возврат объекта. Некоторые из стандартных расширений разметки: xNull, x: Array, :StaticResource и DynamicResource.

58) Каковы четыре основных типа элементов XAML?

Четыре основных типа элементов XAML

  • Корневые элементы
  • Элементы панели
  • Элементы управления
  • Геометрические элементы

59) На что указывает префикс X: в XAML?

Префикс X: используется для сопоставления пространства имен XAML в шаблонах.

60) Какие различные префиксы X: используются в языке XAML?

  • x: Key à устанавливает уникальный ключ для каждого ресурса в словаре ресурсов.
  • x: Classà Задает пространство имен CLR (Common Language Runtime) и имя класса для класса, предоставляющего код
  • x: Name à указывает имя объекта времени выполнения для экземпляра, который существует в коде времени выполнения после обработки элемента объекта
  • x: Static à включает ссылку, которая возвращает статическое значение, которое в противном случае является XAML-совместимым свойством.
  • x: Type à Создает ссылку Type на основе имени типа.

61) Как вы можете установить атрибут свойства как литеральную строку, а не расширение разметки?

Чтобы избежать расширения разметки, вы должны использовать пустую пару фигурных скобок, например

62) Какие типы дочерних элементов может иметь объектный элемент в XAML?

Три типа дочерних элементов, которые может иметь объектный элемент

  • Предметы коллекции
  • Значение свойства содержания.
  • Значение, тип которого можно преобразовать в элемент объекта

63) Объясните, что такое конвертер типов?

Преобразователь типов полезен для преобразования строки в соответствующий тип значения, если не используется расширение разметки. Преобразователь типов определяет четыре члена для преобразования в строку и из строки для целей XAML.

  • Можно преобразовать в
  • CanConvertFrom
  • Преобразовать в
  • Конвертировать из

64) Объяснить синтаксис элемента объекта в XAML?

Для создания экземпляра класса или структуры CLR путем объявления элемента XML используется синтаксис разметки XAML. Этот синтаксис называется синтаксисом элемента объекта.

65) Какими способами можно объявлять объекты в XAML?

Объявить объекты в XAML можно тремя способами

  • Напрямую, используя синтаксис элемента объекта: этот синтаксис используется для объявления корневых объектов или вложенных объектов, которые устанавливают значения свойств.
  • Косвенно, используя синтаксис атрибута. В этом синтаксисе используется встроенное строковое значение, в котором содержится инструкция по созданию объекта. Чтобы установить значение свойства для вновь созданной ссылки, синтаксический анализатор XAML использует эту строку
  • Использование расширения разметки

66) Что должен содержать корневой элемент документа XAML?

В документе XAML корневой элемент состоит только из определенных элементов, и этими элементами являются Window, Canvas или панели.

67) Что такое привязка данных с помощью XAML?

Привязка данных обеспечивает простой способ отображения данных и взаимодействия с ними. Пример покажет, как вы можете выполнить привязку данных в XAML. Привязка в XAML выполняется с использованием синтаксиса.

68) Объясните, как можно отображать разные данные во время выполнения и во время разработки?

  • Один из способов отображения данных во время выполнения и во время разработки — объявить данные в XAML.
  • Еще один способ сделать это — объявить его в XAML, используя различные атрибуты данных из пространства имен конструктора XML. Обычно это пространство имен объявляется с префиксом d:.

69) Объясните, что такое директива function x: Key в XAML?

X: ключ уникально идентифицирует элементы, которые созданы и на которые есть ссылки в словаре, определенном XAML. Добавляя значение x: Key к элементу объекта XAML, можно идентифицировать ресурс в словаре ресурсов, и это наиболее распространенный способ идентификации.

70) Объясните, для чего используется синтаксис элемента свойства?

С помощью синтаксиса элемента свойства вы можете добавить дочерний элемент с именем в форме parent.propertyName.

71) Как можно определить пользовательские классы, используемые в XAML?

Пользовательские классы используются двумя способами

  • С кодом, создающим основное приложение Windows Presentation Foundation (WPF), или внутри исходного кода
  • В отдельной сборке как класс, например исполняемый файл или библиотека DLL, используемая в качестве библиотеки классов

72) Что такое пространство имен Xaml?

Пространство имен можно определить как среду или абстрактный контейнер, используемый для хранения логической группы уникальных идентификаторов или символов.

К настоящему моменту вы уже должны были слышать о нескольких новых аббревиатурах, которые обычно ассоциируются с Windows Vista (под кодовым названием Longhorn).

Эти сокращения включают WinFX, WinFS, WCF (Windows Communication Foundation; кодовое название Indigo) и WPF (Windows Presentation Foundation; кодовое название Avalon). В последние месяцы было много шума вокруг WPF, одного из основных компонентов WinFX. В этой статье я покажу вам, что такое WPF и как начать подготовку к Vista, разрабатывая приложения уже сегодня с помощью доступного SDK.

Почему Windows Presentation Foundation?

Windows Presentation Foundation (WPF) — это новая графическая подсистема в Windows Vista, которая позволит разработчикам создавать приложения, предоставляющие революционные возможности для пользователей. Если вы посмотрите на приложения, используемые сегодня, то это либо приложения для Windows, либо веб-приложения. В то время как приложения Windows предлагают чрезвычайно богатую клиентскую функциональность, развертывание приложений Windows требует значительных ресурсов и делает обслуживание постоянной проблемой. С другой стороны, веб-приложения предлагают простоту развертывания и обслуживания, но делают это за счет усложнения процесса разработки (поскольку Интернет не имеет состояния), а также далеко не идеальной интеграции с платформой.

Целью WPF является предоставление платформы разработки, которая предлагает лучшее из обоих миров, позволяя администраторам безопасно развертывать приложения и управлять ими.

Цель Microsoft при создании WPF состояла в том, чтобы предложить платформу разработки, которая предлагает лучшее из обоих миров, позволяя администраторам безопасно развертывать приложения и управлять ими.

Помимо быстрого развития технологий разработки приложений, аппаратное обеспечение также развивается быстрыми темпами. В частности, вычислительная мощность видеокарт росла гораздо быстрее, чем могли бы использовать разработчики. Все чаще компьютеры оснащаются мощной графической подсистемой, которая используется недостаточно. Приложения могут с легкостью использовать преимущества этих графических карт (например, для обработки трехмерных изображений) для улучшения взаимодействия с пользователем.

И это как раз и является целью WPF, а именно: воспользоваться недоиспользованной мощностью видеокарты и использовать ее для повышения удобства работы пользователей с приложениями Windows. WPF использует Direct3D для векторного рендеринга, что позволяет приложениям использовать широкий спектр мультимедийных материалов, таких как 2D, 3D, аудио, текст, видео, анимация и т. д.

Создание пользовательских интерфейсов с использованием XAML

XAMLPad

Чтобы разработчики могли начать работу с XAML, Microsoft предлагает полезный инструмент, известный как XAMLPad. XAMLPad — это редактор XAML, позволяющий быстро просматривать пользовательский интерфейс. Чтобы использовать XAMLPad, откройте «Пуск», выберите «Программы», выберите Microsoft Windows SDK, затем выберите «Инструменты» и, наконец, выберите XAMLPad. На рис. 1 показаны различные компоненты XAMLPad.


Рисунок 1. Различные компоненты XAMLPad.

XAMLPad предлагает следующие функции:

  1. Автоматический разбор – панель предварительного просмотра (7) будет обновляться по мере ввода кода XAML в (8)
  2. Обновить – обновляет панель предварительного просмотра (7).
  3. Изменяет шрифт на панели редактирования кода (8)
  4. Изменяет размер шрифта на панели редактирования кода (8)
  5. Скрывает панель редактирования кода (8)
  6. Изменяет коэффициент масштабирования панели предварительного просмотра (7)
  7. Панель предварительного просмотра
  8. Панель редактирования кода
  9. Строка состояния

Чтобы увидеть панель XAMLPad в действии, давайте заполним область редактирования некоторым кодом XAML (листинг 1).

На рис. 2 показан получившийся пользовательский интерфейс.


Рисунок 2. Использование XAMLPad для предварительного просмотра кода XAML.

Обратите внимание, что код XAML выглядит как HTML, поскольку все элементы управления пользовательского интерфейса определены декларативно.

XAML поддерживает несколько шаблонов макетов для элементов управления пользовательского интерфейса, и только что показанный использует макет Canvas. Шаблон макета Canvas аналогичен тому, что у вас есть сегодня в Windows Forms. Элементы управления в макете Canvas располагаются с использованием координат x и y. Макет Canvas удобен в тех случаях, когда вам нужно точно расположить различные элементы управления в пользовательском интерфейсе.

Возможно, вы заметили, что в элементе Canvas есть атрибут LayoutTransform. Этот атрибут позволяет масштабировать вывод, просто указав коэффициент масштабирования. Например, если указать коэффициент 0,5 (LayoutTransform="scale 0,5"), то весь макет Canvas уменьшится на 50 % (рис. 3).


Рисунок 3. Использование LayoutTransform для уменьшения вывода.

Макеты

Теперь я опишу различные макеты.

Стековая панель

В макете StackPanel элементы управления располагаются так же, как в стеке. Вы можете складывать элементы управления вертикально или горизонтально. Код XAML в листинге 2 показывает, как работает StackPanel.

На рис. 4 показан вывод приведенного выше кода XAML.


Рисунок 4. Использование макета StackPanel.

Док-панель

В макете DockPanel элементы управления закрепляются с одной из четырех сторон (сверху, слева, справа или снизу) элемента управления DockPanel. Код XAML в листинге 3 показывает, как закрепить четыре элемента управления Button с помощью атрибута DockPanel.Dock.

На рис. 5 показан вывод приведенного выше кода.


Рисунок 5. Использование макета DockPanel.

Сетка позволяет размещать элементы управления в ячейках, как в сетке. Код XAML в листинге 4 показывает, как определить сетку с тремя столбцами и четырьмя строками, а затем добавить двенадцать элементов управления Button в каждую ячейку сетки.

На рис. 6 показан вывод кода XAML, показанного выше.


Рисунок 6. Использование макета сетки.

Создание приложений WPF с помощью Visual Studio 2005

Хотя выпуск Windows Vista намечен на конец 2006 года, вы можете начать разработку приложений WPF уже сегодня, используя Visual Studio 2005.

Типы проектов

Установив все необходимые компоненты для WPF, вы можете разрабатывать приложения WPF с помощью Visual Studio 2005. Для разработки приложений WPF в меню «Файл» выберите «Создать», а затем выберите «Проект…». Под типом проекта Avalon вы должны увидеть три установленных шаблона Visual Studio: приложение Avalon, приложение веб-браузера Avalon и библиотеку управления Avalon (рис. 7).


Рисунок 7: Три шаблона приложения Avalon.

Шаблон приложения Avalon похож на автономное приложение Windows, с которым вы уже знакомы.

Приложение Avalon Web Browser размещается в веб-браузере и выглядит так, как показано на рис. 8. Этот тип приложения Avalon хорошо подходит для сценариев, в которых вы хотели бы воздержаться от развертывания дополнительных компонентов на клиенте. . Таким образом, он работает в контексте песочницы с частичным доверием. Как показано на рис. 8, приложение Avalon Web Browser находится внутри браузера и использует для навигации страницы, а не окна (о чем свидетельствуют две кнопки навигации в верхней части окна).


Рисунок 8. Приложение веб-браузера Avalon.

Вы можете использовать библиотеку управления Avalon для создания пользовательских элементов управления, которые могут использоваться другими приложениями Avalon.

Программное создание пользовательского интерфейса WPF

Цель WPF — использовать преимущества недоиспользуемой мощности видеокарты и использовать ее для улучшения работы пользователей с приложениями Windows.

Сейчас я покажу вам, как написать пользовательский интерфейс WPF с помощью кода. Создайте новое приложение Avalon для Windows и в код программной части файла Window1.xaml по умолчанию (Window1.xaml.vb) добавьте обработчик событий, показанный в листинге 5.

Когда вы скомпилируете и запустите приложение, результат будет выглядеть так, как показано на рис. 9.


Рис. 9. В Visual Studio 2005 нет визуального конструктора для WPF.

Двухмерная графика

Как упоминалось в начале этой статьи, графика — одна из сильных сторон WPF. В примере кода в листинге 6 показано, как можно рисовать двумерную графику с помощью одного из множества графических элементов, доступных в WPF.

В приведенном выше коде три прямоугольника рисуются с помощью элемента Rectangle. Каждый прямоугольник заполнен цветом и привязан к элементу управления Slider. При перемещении каждого ползунка изменяется высота соответствующего прямоугольника, а рядом с ним отображается значение ползунка (рис. 10).


Рисунок 10: 2-D чертежи.

Помимо заливки прямоугольника сплошным цветом, вы также можете заполнить его тенями с помощью кисти. Например, код, показанный в листинге 7, заполняет первый прямоугольник лавандовым и синим цветами, используя метод заливки VerticalGradient. Второй прямоугольник заливается лавандовым и желтым цветами с использованием метода заливки HorizontalGradient. Третий прямоугольник позволяет указать различные смещения, которые будут использоваться для градиентной заливки.

На рис. 11 показано влияние различных градиентных заливок.


Рис. 11. Применение градиентной заливки к прямоугольникам.

Трехмерная графика

Трехмерная графика — главная фишка WPF. Хотя с помощью XAML можно создавать трехмерную графику вручную, это слишком обыденная задача. Вместо этого Microsoft готовит новый набор инструментов, который значительно упростит задачу создания содержимого XAML.

Microsoft Expression Interactive Designer (кодовое название Sparkle), член семейства профессиональных инструментов дизайна Microsoft Expression, позволяет разработчикам приложений создавать привлекательные дизайны пользовательского интерфейса с использованием всего спектра типов мультимедиа, включая векторы, пиксельные изображения, трехмерные изображения. контент, видео и аудио, высококачественный текст и анимация (рис. 12).


Рисунок 12: Microsoft Expression Interactive Designer.

ZAM 3D от Electric Rain

На рис. 13 показана трехмерная модель, визуализированная с помощью ZAM 3D. Чтобы экспортировать графику в формате XAML, перейдите в меню «Файл», выберите «Экспорт…» и сохраните код XAML в текстовый файл.


Рис. 13. Трехмерное проектирование в ZAM 3D.

Если дважды щелкнуть сохраненный файл XAML, он будет загружен в IE как приложение WPF (рис. 14).


Рис. 14. Сохраненный код XAML, загруженный как приложение WPF.

Конструктор XAML Aurora от MobiForm для WinFX

Вы можете использовать Aurora как отдельное приложение (рис. 15) для разработки пользовательского интерфейса или использовать Aurora в составе Visual Studio 2005 (рис. 16).

Рисунок 15. Использование Aurora для разработки пользовательского интерфейса WPF. Рис. 16. Интеграция Aurora с Visual Studio 2005.

Чтобы использовать Aurora в Visual Studio 2005, щелкните правой кнопкой мыши форму (например, Window1.xaml), выберите элемент Открыть с помощью… и выберите Aurora.

Изображение

Помимо двухмерной и трехмерной графики, WPF также поддерживает работу с изображениями. Например, код в листинге 8 показывает, как обрезать изображение с помощью элемента управления геометрией (рис. 17).


Рисунок 17: Вырезание изображения.

Привязка данных

Любое достойное приложение будет использовать данные. А в WPF вы можете привязывать элементы пользовательского интерфейса к широкому спектру источников данных, включая данные XML, веб-службы и, конечно же, базы данных.

Чтобы продемонстрировать привязку данных в WPF, я создал простую программу чтения RSS. В следующем коде определяется поставщик данных XML, указывающий на онлайн-ресурс (документ RSS). Затем он привязывается к элементу управления ListBox, который отображает список заголовков, содержащихся в документе RSS, а также к элементу управления TextBox, который отображает описание элемента новостей.

При выборе элементов в ListBox будет запущено событие TitleChanged. Затем это событие устанавливает свойство DataContext панели StackPanel, чтобы описание выбранного заголовка новости отображалось в элементе управления TextBox.

На рис. 18 показано, что происходит при выполнении приложения.


Рисунок 18. Запуск приложения для чтения RSS.

Обзор

В этой статье вы познакомились с некоторыми функциями WPF, новой графической подсистемы в Windows Vista. В WPF есть намного больше, чем я мог бы рассказать всего в одной статье. Надеюсь, теперь у вас есть лучшее представление о том, что может предложить WPF. В следующей статье я расскажу о некоторых других функциях WPF.

Вы можете попробовать WPF уже сегодня в Windows XP или Windows Server 2003. Для этого вам потребуются следующие компоненты:

Загрузите и установите WinFX SDK отсюда:

Этот загружаемый файл содержит документацию, примеры и инструменты, предназначенные для помощи в разработке управляемых приложений и библиотек с помощью WinFX.

Установите компоненты WinFX Runtime из:

Эта загрузка содержит компоненты WinFX Runtime, необходимые для запуска приложений WPF.

Установите расширения Visual Studio для WinFX из:

Это загружаемый файл обеспечивает поддержку IntelliSense, шаблоны проектов и интеграцию документации для WinFX в Visual Studio 2005.

getting- start-wpf.jpg

Учебное пособие в этом посте поможет вам создать проект, который будет имитировать многие из основных функций текстового процессора. Вы будете удивлены тем, насколько легко реализовать многие функции с помощью стандартных элементов инструментов. Вы познакомитесь с некоторыми из множества конструкций WPF и создадите основу для дальнейших экспериментов.

Предпосылки

Для создания и запуска этого проекта вам потребуются следующие инструменты и ресурсы:

Windows 10 — помещает Windows в Windows Presentation Foundation.

Visual Studio 2019 со следующими рабочими нагрузками и отдельными компонентами:

На GitHub доступен сопутствующий репозиторий для этого сообщения. Он содержит полный исходный код учебного проекта.

Создание проекта

После того, как инструмент завершит создание проекта, обратите внимание на наличие файла App.xaml и связанного с ним файла кода программной части App.xaml.cs. Также проверьте файл MainWindow.xaml и связанный с ним файл кода программной части, MainWindow.xaml.cs.

MainWindow будет главным окном этого приложения, куда вы будете добавлять элементы пользовательского интерфейса. Класс App — это точка входа в приложение, где MainWindow.xaml указан как окно запуска. Вы можете увидеть этот файл App.xaml со строкой:

Если вы когда-нибудь хотели, чтобы ваше приложение запускалось в другом окне, вы должны указать это здесь. Пока оставьте все как есть.

В файле MainWindow.xaml обратите внимание, что основным элементом является сетка.Grid — один из нескольких очень мощных контейнерных компонентов в WPF. Другие включают StackPanel, Canvas, WrapPanel, UniformGrid и DockPanel. Каждый из них имеет свои преимущества и ситуации, в которых он лучше всего подходит. В этом примере вы будете использовать DockPanel.

Замените существующее содержимое файла MainWindow.xaml следующей разметкой XAML:

Измененное значение атрибута Title будет отображаться в строке заголовка окна при запуске приложения. Также обратите внимание, что элемент DockPanel имеет атрибут LastChildFill="True" . Хотя это значение по умолчанию, оно сделано для ясности.

DockPanel — это контейнер, который позволяет закреплять дочерние элементы управления сверху, снизу, слева или справа. По умолчанию последний элемент управления, если ему не задано определенное положение стыковки, заполнит оставшееся пространство. Используйте DockPanel всякий раз, когда вам нужно прикрепить один или несколько элементов управления к одной из сторон, например, для разделения окна на определенные области. В этом примере вы будете добавлять меню, панель инструментов и элементы состояния.

Когда окно будет готово, вы добавите в него компоненты, которые расширят возможности. Первый компонент, который вы добавите, применим ко всему окну и будет размещен за пределами DockPanel. Это будет раздел CommandBindings, в котором будут определены элементы CommandBinding.

Вставьте следующую разметку XAML в файл MainWindow.xaml над элементом DockPanel:

Приведенный выше блок кода добавляет группу команд. Команды — это конструкции, которые связывают имя с действием. Они обеспечивают более слабую связь между элементами пользовательского интерфейса и кодом. В этом случае вы добавляете команды Создать, Открыть и Сохранить. Атрибуты Executed в элементах файла MainWindow.xaml предписывают команде выполнить указанный метод, а атрибут CanExecute указывает на метод CommonCommandBinding_CanExecute. Связанный метод CanExecute в файле кода программной части запускается, когда приложение находится в режиме ожидания, чтобы указать, можно ли выполнить команду или она отключена. В этом случае он всегда возвращает true. Это полезно в ситуациях, когда команда может быть отключена, если не выполняются определенные условия.

Методы обработчика _Execute для команд New , Open и Save в коде пока предоставлены в виде заглушек и вскоре будут доработаны.

Теперь вы добавите в окно первый элемент пользовательского интерфейса. Непосредственно внутри контейнера DockPanel добавьте меню с элементами верхнего уровня File и Edit, вставив внутри элемента следующую разметку XAML:

Обратите внимание, как элементы _File MenuItem ссылаются на ранее добавленные команды.

Элементы меню _Edit ссылаются на Вырезать, Копировать и Вставить, но эти CommandBindings не были созданы. Команды ссылаются на команды ApplicationCommands.Cut, ApplicationCommands.Copy и ApplicationCommands.Paste. Это RoutedCommands, и они будут обрабатываться текстовым полем, которое вы вскоре добавите. Вместо реализации этих команд в коде они будут использовать поведение элемента TextBox по умолчанию. Приложение будет просто маршрутизировать команды до тех пор, пока элемент, который может их обработать, не обработает их. Маршрутизация событий WPF — очень мощная возможность. Перенаправленные события туннелируют вниз по дереву элементов и всплывают вверх по дереву элементов.

Но хотя меню теперь видно, приложение по-прежнему ничего не делает.

Прежде чем продолжить, взгляните на панель дизайна и обратите внимание, как строка меню, только что добавленная с элементом, расположена в верхней части DockPanel. Это следует из атрибута DocPanel.Doc="Top" для элемента Menu.

Продолжая работу с элементами пользовательского интерфейса, добавьте следующий код в файл MainWindow.xaml внутри элемента DockPanel и после ранее вставленных элементов меню:

Здесь вы добавили ToolBarTray с несколькими кнопками, закрепленными вверху, StatusBar с текстовым блоком, закрепленным внизу, и RichTextBox в качестве последнего элемента в DockPanel. Поскольку RichTextBox является последним элементом в DockPanel, он будет занимать центр окна.

Это заботится о коде в файле .xaml.

Затем вы добавите функциональность в файл кода программной части MainWindow.xaml.cs, который оживит приложение.

Диалоговые окна файловой системы используют ресурсы из пространств имен Microsoft.Win32 и System.IO, поэтому вам потребуется добавить следующие директивы using к другим в MainWindow.xaml.cs:

Ранее вы добавляли методы-заглушки для команд "Создать", "Открыть" и "Сохранить". Замените методы-заглушки следующим кодом:

New_Executed() — это метод-обработчик для команды New. При создании нового файла текущая отображаемая текстовая область будет очищена.

Методы Open_Executed() и Save_Executed() немного сложнее, но похожи друг на друга.Откроется диалоговое окно для указания файла для загрузки или сохранения. Расширение файла, примененное к файлам, будет «.rtf» для форматированного текста.

Есть еще три вещи, которые необходимо добавить, чтобы завершить функциональность:

  1. Заполнение полей со списком
  2. Действие при изменении выбора в полях со списком
  3. Предоставление визуальной обратной связи для выделенного текста

Необходимо заполнить поля со списком для шрифта и размера шрифта на панели инструментов. Это будет сделано в конструкторе класса MainWindow с помощью следующего кода.

Хотя в полях со списком есть данные для отображения, они по-прежнему ничего не делают. Добавьте следующий код после конструктора MainWindow:

Эти методы будут вызываться при изменении выбора в поле со списком. Они применят тип и размер шрифта к выбранному тексту.

После этого осталось добавить один блок кода — обработчик событий TextBox.SelectionChanged. Этот метод вызывается каждый раз, когда происходит изменение выделения в текстовом поле. Именно здесь синхронизируются все добавленные вами элементы (поля со списком, кнопки панели инструментов, строка состояния и текстовое поле).

Добавьте следующий код в файл MainWindow.xaml.cs внизу класса MainWindow:

Это интересный блок кода. Первое, что нужно сделать, это получить значение FontFamilyProperty из выбранного кода в текстовом поле. Это значение используется для выбора соответствующего элемента в поле со списком cmbFontFamily. Таким образом, шрифт выбранного кода будет выбран в поле со списком.

Следующие несколько строк делают то же самое для размера и толщины шрифта, а также для кнопок с полужирным шрифтом и курсивом.

Наконец, в строке состояния отображается выделенный текст.

Обратите внимание на проверку типа, выполненную в операторе if перед установкой текста cmbFontSize. Если в выделенном тексте обнаружено несколько размеров шрифта, значением temp будет тип данных, несовместимый с типом данных cmbFontSize.Text. Проверка правильности типа данных предотвращает ошибку при присвоении значения свойства.

Тестирование готового приложения

Создайте и запустите приложение. Введите текст в текстовое поле, которое заполняет центр приложения. Выделите часть и сделайте ее жирной или курсивной. Измените размер и стиль шрифта. Когда будете готовы, сохраните файл и дайте ему имя. Создание нового файла очистит текстовое поле для чего-то нового. Загрузите файл, который вы только что сохранили, и вы сможете продолжить работу над ним. Обратите внимание, как выбранные атрибуты текста отражаются в элементах панели инструментов. Обратите внимание на строку состояния, когда текст выделен. Вы должны увидеть выделенный текст.

Возможные улучшения

Элемент управления RichTextBox имеет множество очень мощных возможностей редактирования. Использование этих возможностей с помощью команд и нескольких элементов пользовательского интерфейса позволяет создать простой, но мощный текстовый редактор.

Созданный здесь макет представляет собой окно стандартного стиля с меню, панелью инструментов и строкой состояния и является хорошей основой для создания дополнительных функций. Рассмотрите возможность добавления инструментов выравнивания для выравнивания текста по левому или правому краю или по центру. Возможно, вы хотите добавить цвет к своему тексту с точки зрения цвета переднего плана или фона. Строка состояния также может быть расширена, чтобы отображать более важную информацию, например количество слов в текстовом поле или даже часы.

Обзор

Дополнительные ресурсы

Следующие справочные ресурсы содержат подробную информацию по темам, обсуждаемым в этом посте:

Обзор RichTextBox: различия между TextBox и RichTextBox

Если вы хотите узнать, как создать приложение WPF для проверки телефонных номеров и получения информации о вызывающих абонентах и ​​их телефонах, прочтите этот пост:

Недавно я участвовал в групповом обсуждении вопроса о том, стоит ли выбирать WPF в качестве основы для нового приложения только для Windows. Само приложение не должно иметь сложный пользовательский интерфейс, но может потребоваться использование WebView2 и/или некоторых сторонних элементов управления для рендеринга, просмотра и печати документов.

Насколько я могу судить, в наши дни Microsoft больше любит Windows Forms, чем WPF. Надеюсь, я ошибаюсь, но я наблюдаю определенные признаки того, что WPF в настоящее время либо отложен, либо переведен в режим поддержки с очень низким уровнем обслуживания:

Сама дорожная карта WPF (или, скорее, ее отсутствие по сравнению с WinForms). Согласно этому документу, единственной текущей задачей является "включение исправлений обслуживания .NET Framework в .NET Core 3.1 и .NET 5".

Ошибка "Это репозиторий мертв" в репозитории WPF. Много интересных комментариев в этой ветке, особенно в этой:

Настоящая причина уже была сообщена сообществу на YouTube.Команда была объединена с WinUI и создана с нуля, по-видимому, все из первоначальной команды ушли, а новая команда очень ограничена в ресурсах, поэтому им не удается доставить больше пары исправлений. Теперь мы можем жаловаться, что вместо того, чтобы делать WPF, WinUI, MAUI, Blazor на Electron (какая плохая идея!), они должны сосредоточиться только на одном фреймворке UI-vnext, но после отказа UWP они, похоже, не могут решить, что делать, каждая группа по-своему говорит о «видении».

Некоторые участники этой ветки даже высказывали инициативы по созданию форка WPF и поддержке его независимо от Microsoft.

Игорь Великороссов из Microsoft о новых возможностях Windows Forms:

Приятно видеть, что WinForms активно поддерживается, но как насчет WPF? Ознакомьтесь с комментариями скорбящих читателей. Тогда премьер-министр Microsoft Премалини Дэвид ответил обещанием увеличить внутренние ресурсы команды WPF. Глядя на историю коммитов репозитория WPF, кажется, что этого еще не произошло.

Я ожидал, что WPF станет лучшим контейнером для размещения WebView2, который поможет модернизировать корпоративные настольные приложения WPF, которые обычно все еще используют устаревший элемент управления WebBrowser на основе IE11. На данный момент это далеко не так:

В целом, несмотря на то, что другие команды Microsoft продолжают поддерживать WPF как платформу (включая WebView2, BlazorWebView, XAML Islands, Visual Studio Designers), репозиторий WPF на GitHub в последнее время ведет себя очень тихо.< /p>

Что сейчас находится в поле зрения Microsoft по разработке пользовательского интерфейса только для Windows? Что ж, официальным будущим путем, по-видимому, является WinUI 3. Он был в центре внимания во время сборки 2021 и недавней презентации Windows 11. Современное приложение Windows Terminal — большой хит с открытым исходным кодом, пользующийся заслуженным признанием — создано с помощью WinUI и в основном на C++.

Очевидно, Microsoft также вложила значительные средства в React Native для Windows (очень активный репозиторий) и фреймворк Fluent UI (используется в Office 365).

Кроме того, технологии пользовательского интерфейса, которые Microsoft использует для своих основных проектов, не обязательно всегда соответствуют тому, что они рекомендуют остальным разработчикам. В настоящее время это может быть особенно запутанным доменом, просто посмотрите эту ветку в Твиттере Джерри Никсона, инженера Microsoft:

Джерри Никсон 🖖 изображение профиля

Я также настоятельно рекомендую прочитать книгу Ника Рэндольфа "Будущее разработки Windows (и других платформ)". Это отличный способ прояснить путаницу в фрагментированном пространстве различных фреймворков пользовательского интерфейса Windows.

  • WinForms
  • UWP (но обязательно прочитайте это объявление)
  • Инструментарий сообщества Windows (с набором инструментов MVVM)
<р>. и больше. Возвращаясь к нашему конкретному случаю с приложением, я лично голосовал за Windows Forms, как бы странно это ни звучало в 2021 году.

Некоторые аргументы в пользу WinForms:

он ​​устарел и проверен в боевых условиях, но все еще активно поддерживается (в отличие от WPF в настоящее время);

имеет простой, беспристрастный и хорошо известный API;

под капотом используются собственные элементы управления пользовательским интерфейсом Win32, поэтому…

… легко интегрируется с другими собственными и управляемыми элементами управления или модернизируется с помощью WebView2 , BlazorWebView и/или XAML Islands. Я ожидаю меньше проблем с взаимодействием фокуса/клавиатуры, или, по крайней мере, их должно быть легче решать, чем с WPF.

можно абстрагироваться от чего-то простого, например шаблона Model-View-Presenter, или чего-то сложного, например реактивного пользовательского интерфейса;

Некоторые последние обновления:

Изображение профиля Рафаэля Риверы

@noseratio @Brouilles @draginol @dotMorten и я напрямую общаемся с людьми из WPF. Они растут (!) очень медленно, в основном из-за нехватки ресурсов. Он не мертв и не находится на системе жизнеобеспечения. WPF по-прежнему является одной из наиболее часто используемых платформ приложений в Windows (после WinForms).

Читайте также: