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]
В 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]
После успеха языков разметки для веб- разработки 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]
WPF используется для разработки Visual Studio , флагманской IDE Microsoft , и использовался для разработки Microsoft Expression Blend . [33]
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 .
{{cite book}}
: Внешняя ссылка в |title=
( помощь )