stringtranslate.com

Основа презентаций Windows

Windows Presentation Foundation ( WPF ) — это бесплатная и открытая среда пользовательского интерфейса для настольных приложений на базе Windows . Приложения WPF основаны на .NET и в основном разрабатываются с использованием C# и XAML . [2]

Первоначально разработанный корпорацией Microsoft , WPF был первоначально выпущен как часть .NET Framework 3.0 в 2006 году. В 2018 году Microsoft выпустила WPF как открытый исходный код по лицензии MIT . [3] Дизайн WPF и его язык макета XAML были приняты множеством других фреймворков пользовательского интерфейса, таких как UWP , .NET MAUI и Avalonia .

Обзор

WPF использует XAML , язык на основе XML , для определения и связывания различных элементов интерфейса, а также использует C# для определения поведения программы. [4] Приложения WPF развертываются как автономные настольные программы.

WPF поддерживает ряд общих элементов пользовательского интерфейса , таких как 2D/3D-рендеринг, фиксированные и адаптивные документы , типографика , векторная графика , анимация во время выполнения и предварительно отрендеренные медиа. Эти элементы затем могут быть связаны и управляться на основе различных событий, взаимодействий пользователя и привязок данных . [5]

Библиотеки времени выполнения WPF включены во все версии Microsoft Windows , начиная с Windows Vista и Windows Server 2008. [6] [7]

На мероприятии Microsoft Connect 4 декабря 2018 года компания Microsoft объявила о выпуске WPF как проекта с открытым исходным кодом на GitHub. Он выпущен под лицензией MIT . Windows Presentation Foundation стал доступен для проектов, ориентированных на программную платформу .NET , однако система не является кроссплатформенной и по-прежнему доступна только на Windows. [3] [8]

Примеры кода

Снимок экрана разработки базового приложения пользовательского интерфейса Windows Presentation Foundation (WPF) в Visual Studio 2022. Для определения макета используется XAML, а для определения интерактивного поведения — C#.

В WPF экраны и другие элементы пользовательского интерфейса определяются с помощью пары файлов: файла XAML и связанного с ним файла C# с расширением .xaml.cs, часто называемого «кодом-задним». Файл XAML декларативно определяет макет, содержимое и другие свойства элемента пользовательского интерфейса, тогда как файл C# позволяет выставлять точки входа кода для интерактивности. [4]

Базовый пример интерактивной программы Hello, World! можно создать следующим образом:

MainWindow.xaml:

 <Window x:Class= "WpfExample.MainWindow" xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" Title= "MainWindow" Height= "200" Width= "300" > <StackPanel Orientation= "Vertical" > <TextBlock Text= "Как вас зовут?" /> <TextBox x:Name= "NameInputTextBox" /> <Button x:Name= "SubmitButton" Click= "SubmitButton_Click" > <TextBlock Text= "Отправить" /> </Button> <TextBlock x:Name= "ResultTextBlock" /> </StackPanel> </Window>                     

MainWindow.xaml.cs:

с использованием System.Windows ; пространство имен WpfExample { public partial class MainWindow : Window { public MainWindow () { InitializeComponent (); }              private void SubmitButton_Click ( object sender , RoutedEventArgs e ) { var name = this . NameInputTextBox . Text ; this . ResultTextBlock . Text = $"Привет, {name}!" ; } } }               

В приведенном выше примере элемент пользовательского интерфейса с именем MainWindowобъявляется как подкласс встроенного Windowкласса. Файл XAML определяет макет, который в этом примере представляет собой вертикальную коллекцию элементов управления — текстовый блок с инструкциями для пользователя, текстовое поле для ввода имени пользователем, кнопка для отправки и текстовый блок результатов. При нажатии кнопки SubmitButton_Clickвызывается метод, который определен в .xaml.csфайле. Эта функция обновляет конечный текстовый блок, чтобы он содержал сообщение, приветствующее пользователя, обращаясь к нему по его отправленному имени.

Функции

Медиа и графика

WPF поддерживает большинство современных типов медиа, включая векторные и растровые изображения, аудио, видео, и может поддерживать как 2D, так и 3D-рендеринг. [9] Он также поддерживает реализацию графических эффектов на визуальных элементах, таких как пиксельные шейдеры HLSL и встроенные эффекты, такие как размытие и тени . [10] [11]

WPF в основном использует векторную графику, что позволяет масштабировать большинство элементов управления и элементов без потери качества или пикселизации . [12] [13]

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

WPF использует привязку данных , технику распространения изменений между элементами пользовательского интерфейса и объектной моделью программы. [14] Например, текстовый блок, определенный в XAML, может привязать свое содержимое к строковому свойству, хранящемуся в объекте C#, следующим образом:

<TextBlock Text= "{Имя пользователя привязки}" />  
public class ExampleViewModel { public string Имя пользователя { get ; set ; } }         

Это заставит текстовый блок отображать значение свойства Username.

Направление связывания данных настраивается — его можно определить как «пользовательский интерфейс — источник» (например, текст, введенный в текстовое поле , передается в связанное строковое свойство в коде), «источник — пользовательский интерфейс» (например, визуальные часы обновляются для отображения текущего времени, сохраненного в коде) или как двунаправленное. [14]

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

Большинство свойств встроенных элементов управления могут быть привязаны к данным, а пользовательские элементы управления могут создавать привязываемые свойства, определяя свойства зависимости. [14] [15]

MVVM , архитектурный шаблон, рекомендуемый Microsoft для разработчиков WPF, в значительной степени опирается на привязку данных. [16]

Стили и шаблоны

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

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

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

Анимации

В WPF многие визуальные свойства могут быть анимированы. Это раскрывается через свойства зависимости, которые являются той же базовой системой, на которую опирается привязка данных. Анимации WPF основаны на времени, а не на кадрах. [18]

Классы анимации основаны на типе .NET свойства, которое должно быть анимировано. Например, изменение цвета элемента выполняется с помощью класса ColorAnimation, а анимация ширины элемента (который типизирован как double ) выполняется с помощью класса DoubleAnimation. [18]

Анимации можно группировать в раскадровки, которые являются основным способом запуска, остановки, приостановки и иного управления анимацией. [18]

Документы и тексты

WPF изначально поддерживает постраничные документы. Он предоставляет DocumentViewerкласс, который предназначен для чтения документов с фиксированной компоновкой. FlowDocumentReaderКласс предлагает различные режимы просмотра, такие как постраничный или прокручиваемый, а также переформатирует текст , если область просмотра изменяется. Он поддерживает как спецификацию XML Paper , так и соглашения Open Packaging Conventions . [19]

WPF включает в себя ряд функций рендеринга текста, включая шрифты OpenType , TrueType и OpenType CFF ( Compact Font Format ). Это означает, что WPF может поддерживать широкий спектр функций текста, включая лигатуры , цифры старого стиля , варианты наклонных букв , дроби , надстрочные и подстрочные знаки , капители , символы Ruby , замену глифов , множественные базовые линии и кернинг . [20]

WPF обрабатывает тексты в кодировке Unicode и обрабатывает тексты независимо от глобальных настроек, таких как системная локаль. Кроме того, предусмотрены резервные механизмы, позволяющие обрабатывать направление письма (горизонтальное или вертикальное) независимо от имени шрифта; создание международных шрифтов из составных шрифтов с использованием группы одноязычных шрифтов; встраивание составных шрифтов. Информация о связывании шрифтов и резервных шрифтах хранится в переносимом XML-файле с использованием технологии составных шрифтов. [21] XML-файл имеет расширение .CompositeFont .

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

Рендеринг текста WPF использует преимущества технологий ClearType , такие как субпиксельное позиционирование, естественная ширина продвижения, сглаживание по оси Y, аппаратное ускорение рендеринга текста, а также агрессивное кэширование предварительно отрисованного текста в видеопамяти. [22] ClearType нельзя отключить в старых приложениях WPF 3.x. [23]

Взаимодействие

Возможности Windows Forms возможны благодаря использованию классов ElementHostи WindowsFormsHost.

Чтобы включить использование WinForms, разработчик выполняет это из своего кода WPF C#: [24]

System.Windows.Forms.Integration.WindowsFormsHost.EnableWindowsFormsInterop();

Программы WPF, через функцию P/Invoke среды CLR , могут получать доступ к собственной функциональности, например, вызывая функции из библиотек Windows . Это позволяет взаимодействовать и управлять другими частями операционной системы, включая неуправляемые библиотеки . [25]

Альтернативный ввод и доступность

WPF поддерживает Windows Ink для ввода с помощью пера [26] и мультисенсорного ввода в Windows 7 и выше. [27] Он также поддерживает Microsoft UI Automation , что позволяет разработчикам создавать доступные интерфейсы и предоставлять пользовательский интерфейс автоматизированным тестовым фреймворкам. [28]

XAML

После успеха языков разметки для веб- разработки WPF представил расширяемый язык разметки приложений ( XAML ; /ˈzæməl/ ) , основанный на XML . XAML разработан как более эффективный метод разработки пользовательских интерфейсов приложений. [29] XAML является декларативным языком , то есть разработчик (или дизайнер) описывает поведение и интеграцию компонентов без использования процедурного программирования . Хотя редко случается, что все приложение будет полностью построено на XAML, введение XAML позволяет дизайнерам приложений более эффективно вносить свой вклад в цикл разработки приложений. Использование XAML для разработки пользовательских интерфейсов также позволяет разделить модель и представление, что считается хорошим архитектурным принципом. [30] В XAML элементы и атрибуты сопоставляются с классами и свойствами в базовых API.

Как и в веб-разработке, и макеты, и определенные темы хорошо подходят для разметки, но XAML не требуется ни для того, ни для другого. Действительно, все элементы WPF могут быть закодированы на языке .NET ( C# , VB.NET ). Код XAML в конечном итоге может быть скомпилирован в управляемую сборку таким же образом, как и все языки .NET.

Развертывание

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

Исторически WPF поддерживал компиляцию в XBAP , формат файла, предназначенный для отображения в веб-браузерах через плагин NPAPI , но поддержка NPAPI и XBAP была постепенно прекращена браузерами, и компиляция XBAP теперь больше не включена в WPF для .NET. [31] [32]

Использование и прием

Visual Studio — пример приложения, созданного с использованием WPF.

WPF используется для разработки Visual Studio , флагманской IDE Microsoft , и использовался для разработки Microsoft Expression Blend . [33]

Влияние на другие фреймворки пользовательского интерфейса

Пример приложения, созданного с помощью UWP, фреймворка на основе XAML, созданного под влиянием WPF

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

Silverlight (кодовое название WPF/E - WPF Everywhere), выпущенный в 2007 году, является устаревшим кроссбраузерным плагином для браузеров , который содержал технологию на основе WPF, включая XAML, которая предоставляла такие функции, как видео, векторная графика и анимация. В частности, он был предоставлен как дополнение для Mozilla Firefox , Internet Explorer 6 и выше, Google Chrome 42 и ниже и Apple Safari . Microsoft призвала разработчиков прекратить использование Silverlight в 2015 году, [34] а поддержка была официально прекращена в 2021 году. [35]

После того, как в 2018 году WPF стал проектом с открытым исходным кодом, он был разветвлен на проект Avalonia , кроссплатформенный пользовательский интерфейс на основе XAML с открытым исходным кодом .NET, распространяемый по лицензии MIT . В то время как WPF предназначен только для Windows, Avalonia также поддерживает сборки для веба (через WebAssembly ), MacOS , Android , iOS и Linux . Название Avalonia отсылает к кодовому имени WPF в разработке («Avalon») и позиционирует себя как «духовного преемника WPF». [36] В настоящее время Avalonia используется в инструментах, созданных Unity , GitHub и JetBrains . [37]

XAML, который был впервые разработан для WPF, был принят для других подобных библиотек пользовательского интерфейса, разработанных Microsoft, таких как UWP , [38] разработанная для приложений Windows 10 , Windows 11 , Xbox One и Xbox Series S/X , и .NET MAUI (ранее Xamarin.Forms ), разработанная для создания кроссплатформенных собственных приложений Android и iOS . [39]

Разработка

Разработчики приложений WPF обычно используют Microsoft Visual Studio . Visual Studio содержит комбинацию редактора XAML и визуального конструктора WPF, начиная с Visual Studio 2008. [40] До Visual Studio 2008 надстройка конструктора WPF под кодовым названием Cider была оригинальным выпуском редактора WYSIWYG для создания окон, страниц и пользовательских элементов управления WPF. Она была доступна для Visual Studio 2005 как расширения Visual Studio 2005 для .NET Framework 3.0 CTP для первоначального выпуска WPF. [41]

Visual Studio не является строго обязательным для разработки проектов WPF, поскольку решения могут быть построены в командной строке с помощью MSBuild . [42]

Microsoft Blend — это ориентированный на дизайнера инструмент, который предоставляет монтажную область для создания приложений WPF с 2D- и 3D-графикой, текстом и содержимым форм. Он генерирует XAML , который можно экспортировать в другие инструменты, и делится решениями (файлы sln) и форматами проектов (csproj, vbproj) с Microsoft Visual Studio. Microsoft Expression Design — это инструмент для работы с растровой и 2D-векторной графикой для экспорта в XAML .

Ссылки

  1. ^ "v8.0.5". github.com . 2023-05-14 . Получено 2023-05-30 .
  2. ^ "Что такое Windows Presentation Foundation - WPF .NET". learn.microsoft.com . 2023-06-02 . Получено 2024-05-15 .
  3. ^ ab Martin, Jeff (4 декабря 2018 г.). "Microsoft Open Sources WPF, WinForms и WinUI". InfoQ . Получено 2018-12-06 .
  4. ^ ab dotnet-bot. "Обзор XAML (WPF)". msdn.microsoft.com . Получено 31 марта 2018 г. .
  5. ^ Селлс, Крис; Гриффитс, Ян (2007). Программирование WPF: Создание пользовательского интерфейса Windows с помощью Windows Presentation Foundation. "O'Reilly Media, Inc.". ISBN 9780596554798.
  6. ^ kexugit (2007-03-14). "Mailbag: Какая версия .NET Framework включена в какую версию ОС?". learn.microsoft.com . Получено 2024-05-25 .
  7. ^ gewarren (24.04.2024). "Версии .NET Framework и ОС Windows - .NET Framework". learn.microsoft.com . Получено 25.05.2024 .
  8. ^ Хансельман, Скотт (4 декабря 2018 г.). «Объявление о том, что WPF, WinForms и WinUI переходят в категорию Open Source» . Получено 06.12.2018 .
  9. ^ Графика и мультимедиа. Msdn.Microsoft.com. Получено 29.08.2013.
  10. ^ dotnet-bot. "Класс эффекта (System.Windows.Media.Effects)". learn.microsoft.com . Получено 2024-05-22 .
  11. ^ "4. Как WPF и Silverlight используют шейдеры - HLSL и пиксельные шейдеры для разработчиков XAML [Книга]". www.oreilly.com . Получено 28.05.2024 .
  12. ^ "Введение в Windows Presentation Foundation". msdn.microsoft.com . Получено 31 марта 2018 г. .
  13. ^ «Что нового в WPF 3.5? Вот пятнадцать интересных функций...» Получено 14 октября 2007 г.
  14. ^ abcd adegeo (2023-09-02). "Обзор привязки данных - WPF .NET". learn.microsoft.com . Получено 2024-05-22 .
  15. ^ adegeo (28.06.2022). "Обзор свойств зависимости - WPF .NET". learn.microsoft.com . Получено 22.05.2024 .
  16. ^ kexugit (2016-12-08). "Шаблоны - приложения WPF с шаблоном проектирования Model-View-ViewModel". learn.microsoft.com . Получено 2024-05-25 .
  17. ^ adegeo (2023-03-03). "Стили и шаблоны - WPF .NET". learn.microsoft.com . Получено 2024-05-22 .
  18. ^ abc adegeo (2022-03-17). "Обзор анимации - WPF .NET Framework". learn.microsoft.com . Получено 2024-05-22 .
  19. ^ adegeo (2023-02-06). "Обзор документов - WPF .NET Framework". learn.microsoft.com . Получено 2024-05-22 .
  20. ^ adegeo (2022-08-18). "Возможности шрифтов OpenType - WPF .NET Framework". learn.microsoft.com . Получено 2024-05-22 .
  21. ^ «Типографика в Windows Presentation Foundation». msdn.microsoft.com . Получено 31 марта 2018 г. .
  22. ^ dotnet-bot. "Обзор ClearType". msdn.microsoft.com . Получено 31 марта 2018 г. .
  23. ^ "Отключить сглаживание". social.msdn.microsoft.com . Получено 31 марта 2018 г. .
  24. ^ dotnet-bot. "Метод WindowsFormsHost.EnableWindowsFormsInterop (System.Windows.Forms.Integration)". learn.microsoft.com . Получено 2024-05-22 .
  25. ^ jkoritzinsky (2024-05-10). "Platform Invoke (P/Invoke) - .NET". learn.microsoft.com . Получено 2024-05-25 .
  26. ^ adegeo (2022-08-18). "Цифровое рукописное ввод - Windows Forms и COM против WPF". learn.microsoft.com . Получено 2024-05-22 .
  27. ^ kexugit (2015-08-12). "MSDN Magazine: UI Frontiers - События многосенсорного управления в WPF". learn.microsoft.com . Получено 2024-05-22 .
  28. ^ Xansky. "Обзор автоматизации пользовательского интерфейса". msdn.microsoft.com . Получено 31 марта 2018 г. .
  29. ^ Макдональд, Мэтью (2010). Pro WPF в VB 2010: Windows Presentation Foundation в .NET 4. Apress. ISBN 9781430272403.
  30. ^ Ларман, Крейг. https://courses.cs.duke.edu/compsci308/spring24/readings/larman_model_view_separation.pdf Применение UML и шаблонов: введение в объектно-ориентированный анализ и проектирование и унифицированный процесс (2-е изд.). стр. 472. {{cite book}}: Внешняя ссылка в |title=( помощь )
  31. ^ adegeo. "FAQ о поддержке XBAP". learn.microsoft.com . Получено 2024-05-15 .
  32. ^ kexugit (2011-03-09). "IE9 - XBAPs отключены в зоне Интернета". learn.microsoft.com . Получено 2024-05-15 .
  33. ^ Блог, Visual Studio (2010-02-16). "WPF в Visual Studio 2010 - Часть 1: Введение". Блог Visual Studio . Получено 2024-05-22 .
  34. ^ Блог, Microsoft Edge; Смит, Джерри (2015-07-02). «Переход на HTML5 Premium Media». Блог Microsoft Edge . Получено 2024-05-23 .
  35. ^ GitHub-Name. "Silverlight 5 - Microsoft Lifecycle". learn.microsoft.com . Получено 2024-05-23 .
  36. ^ "Avalonia UI - кроссплатформенный UI Framework для .NET". Avalonia UI . Получено 2024-05-16 .
  37. ^ "Avalonia UI - Витрина". avaloniaui.net . Получено 2024-05-23 .
  38. ^ jwmsft (2022-10-20). "Платформа XAML - приложения UWP". learn.microsoft.com . Получено 2024-05-23 .
  39. ^ davidbritch (2023-07-25). "XAML - .NET MAUI". learn.microsoft.com . Получено 2024-05-23 .
  40. ^ Сотрудники CodeGuru (6 апреля 2009 г.). «Экскурсия по WPF в Visual Studio 2008». КодГуру . Проверено 23 мая 2024 г.
  41. ^ "Сведения о загрузке: Microsoft Visual Studio Code Name "Orcas" Community Technology Preview - WinFX™ Development Tools". 2006-04-15. Архивировано из оригинала 2006-04-15 . Получено 2024-05-23 .
  42. ^ adegeo (2022-08-18). "Скомпилировать приложение - WPF .NET Framework". learn.microsoft.com . Получено 2024-05-23 .

Библиография

Внешние ссылки