Windows Presentation Foundation: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м Примечания: удаление удалённого шаблона
м исправление наращений
 
(не показано 13 промежуточных версий 12 участников)
Строка 1: Строка 1:
[[Файл:Dotnet 3.5.png|thumb|right|350px|WPF в составе .NET Framework]]
[[Файл:Dotnet 3.5.png|thumb|right|350px|WPF в составе .NET Framework]]
'''Windows Presentation Foundation''' ('''WPF'''<ref>Обычно произносится как «даб-пи-эф»</ref>) — система для построения клиентских приложений [[Windows]] с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе [[.NET Framework]] (начиная с версии [[.NET Framework 3.0|3.0]]), использующая язык [[XAML]]<ref>Произносится как «замл»</ref>.
'''Windows Presentation Foundation''' ('''WPF''') — аналог WinForms, система для построения клиентских приложений [[Windows]] с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе [[.NET Framework]] (начиная с версии [[.NET Framework 3.0|3.0]]), использующая язык разметки [[XAML]]<ref>Произносится как «замл»</ref>.


WPF предустановлена в [[Windows Vista]] ([[.NET Framework]] 3.0), [[Windows 7]] ([[.NET Framework]] 3.5 SP1), [[Windows 8]] (.NET Framework 4.0 и 4.5), [[Windows 8.1]] (.NET Framework 4.5.1). С помощью WPF можно создавать широкий спектр как автономных, так и запускаемых в [[браузер]]е<!--онлайн?--> приложений<ref name="msdn_aa970268">
WPF предустановлена в [[Windows Vista]] ([[.NET Framework]] 3.0), [[Windows 7]] ([[.NET Framework]] 3.5 SP1), [[Windows 8]] (.NET Framework 4.0 и 4.5), [[Windows 8.1]] (.NET Framework 4.5.1) и [[Windows 10]] (.NET Framework 4.7). С помощью WPF можно создавать широкий спектр как автономных, так и запускаемых в [[браузер]]е<!--онлайн?--> приложений<ref name="msdn_aa970268">
{{cite web| url =http://msdn.microsoft.com/ru-ru/library/aa970268.aspx| title =Введение в WPF| author =MSDN| date =| work =| publisher =Microsoft| accessdate =2010-11-15| lang =ru| archiveurl =https://www.webcitation.org/65RPO3MJo?url=http://msdn.microsoft.com/ru-ru/library/aa970268.aspx| archivedate =2012-02-14}}
{{cite web
| url = http://msdn.microsoft.com/ru-ru/library/aa970268.aspx
| title = Введение в WPF
| author = MSDN
| date =
| work =
| publisher = Microsoft
| accessdate = 2010-11-15
| lang = ru
| archiveurl = http://www.webcitation.org/65RPO3MJo
| archivedate = 2012-02-14
}}
</ref>.
</ref>.


Строка 28: Строка 17:
|страницы = 25
|страницы = 25
|год = 2008
|год = 2008
|издание = 2-ое
|издание = 2-е
|место = М.
|место = М.
|издательство = [[Вильямс (издательство)|«Вильямс»]]
|издательство = [[Вильямс (издательство)|«Вильямс»]]
Строка 48: Строка 37:
WPF предоставляет широкий спектр возможностей по созданию интерактивных настольных приложений:
WPF предоставляет широкий спектр возможностей по созданию интерактивных настольных приложений:


===Привязка данных===
=== Привязка данных ===
Это гибкий механизм, который позволяет через расширения разметки XAML связывать различные данные (от значений свойств элементов управления до общедоступных свойств, реализующих поля базы данных через [[Entity Framework]]). Привязка данных представлена классом [http://msdn.microsoft.com/ru-ru/library/system.windows.data.binding.aspx Binding], который в свою очередь унаследован от [http://msdn.microsoft.com/ru-ru/library/system.windows.markup.markupextension.aspx MarkupExtension], что позволяет использовать привязки не только в коде, но и в разметке:
Это гибкий механизм, который позволяет через расширения разметки XAML связывать различные данные (от значений свойств элементов управления до общедоступных свойств, реализующих поля базы данных через [[Entity Framework]]). Привязка данных представлена классом [http://msdn.microsoft.com/ru-ru/library/system.windows.data.binding.aspx Binding], который в свою очередь унаследован от [http://msdn.microsoft.com/ru-ru/library/system.windows.markup.markupextension.aspx MarkupExtension], что позволяет использовать привязки не только в коде, но и в разметке:


Строка 58: Строка 47:
</source>
</source>


Помимо основного класса Binding в WPF реализовано еще несколько механизмов привязок:
Помимо основного класса Binding в WPF реализовано еще несколько механизмов привязок:
* [http://msdn.microsoft.com/ru-ru/library/system.windows.data.multibinding.aspx MultiBinding] - позволяет создавать множественные привязки, указывая несколько элементов
* [http://msdn.microsoft.com/ru-ru/library/system.windows.data.multibinding.aspx MultiBinding] — позволяет создавать множественные привязки, указывая несколько элементов
* [http://msdn.microsoft.com/ru-ru/library/system.windows.templatebindingextension.aspx TemplateBinding] - используется в шаблонах для связывания свойства элемента внутри шаблона со свойством элемента, к которому применен шаблон
* [http://msdn.microsoft.com/ru-ru/library/system.windows.templatebindingextension.aspx TemplateBinding] — используется в шаблонах для связывания свойства элемента внутри шаблона со свойством элемента, к которому применен шаблон
* [http://msdn.microsoft.com/ru-ru/library/system.windows.data.prioritybinding.aspx PriorityBinding] - ранжирует список привязок и выбирает из них свойство (согласно приоритету) к которому будет применена привязка. Если привязка, имеющая наивысший приоритет успешно возвращает значение, то нет необходимости обрабатывать другие привязки в списке.
* [http://msdn.microsoft.com/ru-ru/library/system.windows.data.prioritybinding.aspx PriorityBinding] — ранжирует список привязок и выбирает из них свойство (согласно приоритету) к которому будет применена привязка. Если привязка, имеющая наивысший приоритет успешно возвращает значение, то нет необходимости обрабатывать другие привязки в списке.


===Стили===
=== Стили ===
Позволяют создавать стилевое оформление элементов и, как правило, используются только в разметке:
Позволяют создавать стилевое оформление элементов и, как правило, используются только в разметке:


Строка 79: Строка 68:
Если стиль задается в ресурсах (например в словаре ресурсов), то можно использовать атрибут '''x:Key''' для указания уникального ключа. Затем в элементе управления, к которому необходимо применить стиль, нужно использовать расширение разметки '''StaticResource''' для связывания с этим стилем. Если использовать этот прием, то стили не будут нагромождать разметку.
Если стиль задается в ресурсах (например в словаре ресурсов), то можно использовать атрибут '''x:Key''' для указания уникального ключа. Затем в элементе управления, к которому необходимо применить стиль, нужно использовать расширение разметки '''StaticResource''' для связывания с этим стилем. Если использовать этот прием, то стили не будут нагромождать разметку.


===Шаблоны элементов управления===
=== Шаблоны элементов управления ===
Позволяют менять графическое оформление элементов и представлены классом [http://msdn.microsoft.com/ru-ru/library/system.windows.controls.controltemplate.aspx ControlTemplate]. В отличие от стилей, можно менять не только графическое представление элемента, но и его структуру. При этом шаблон элемента управления задается через свойство [http://msdn.microsoft.com/ru-ru/library/system.windows.controls.control.template(v=vs.95).aspx Template].
Позволяют менять графическое оформление элементов и представлены классом [http://msdn.microsoft.com/ru-ru/library/system.windows.controls.controltemplate.aspx ControlTemplate]. В отличие от стилей, можно менять не только графическое представление элемента, но и его структуру. При этом шаблон элемента управления задается через свойство [http://msdn.microsoft.com/ru-ru/library/system.windows.controls.control.template(v=vs.95).aspx Template].


Строка 97: Строка 86:
</source>
</source>


===Шаблоны данных===
=== Шаблоны данных ===
В отличие от шаблонов элементов управления, задаются для определенного контекста данных (который в блочных элементах управления задается через свойство [http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontext.aspx DataContext], а в списковых через [http://msdn.microsoft.com/ru-ru/library/system.windows.controls.itemscontrol.itemssource.aspx ItemsSource]). Сам шаблон данных представлен классом [http://msdn.microsoft.com/ru-ru/library/system.windows.datatemplate.aspx DataTemplate]. Для обозначения типа данных, к которому необходимо применить шаблон, используется свойство DataType.
В отличие от шаблонов элементов управления, задаются для определенного контекста данных (который в блочных элементах управления задается через свойство [http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontext.aspx DataContext], а в списковых через [http://msdn.microsoft.com/ru-ru/library/system.windows.controls.itemscontrol.itemssource.aspx ItemsSource]). Сам шаблон данных представлен классом [http://msdn.microsoft.com/ru-ru/library/system.windows.datatemplate.aspx DataTemplate]. Для обозначения типа данных, к которому необходимо применить шаблон, используется свойство DataType.


===Ресурсы===
=== Ресурсы ===
Система ресурсов позволяет объединять шаблоны, стили, кисти, анимацию и многие другие интерактивные элементы, что существенно упрощает работу с ними. Ресурсы задаются в свойстве '''Resources''' класса FrameworkElement, от которого унаследованы все элементы управления, панели компоновки и даже класс Application. Это позволяет создавать многоуровневую систему ресурсов:
Система ресурсов позволяет объединять шаблоны, стили, кисти, анимацию и многие другие интерактивные элементы, что существенно упрощает работу с ними. Ресурсы задаются в свойстве '''Resources''' класса FrameworkElement, от которого унаследованы все элементы управления, панели компоновки и даже класс Application. Это позволяет создавать многоуровневую систему ресурсов:
* ресурсы внутри объекта - действительны только для этого объекта
* ресурсы внутри объекта — действительны только для этого объекта
* ресурсы внутри панели компоновки (например Grid) - позволяет задать границу контекста ресурсов на уровне этой панели
* ресурсы внутри панели компоновки (например Grid) — позволяет задать границу контекста ресурсов на уровне этой панели
* ресурсы внутри окна Window - если в приложении используется несколько окон, то ресурсы одного окна не будут доступны ресурсам другого окна
* ресурсы внутри окна Window — если в приложении используется несколько окон, то ресурсы одного окна не будут доступны ресурсам другого окна


<source lang=xml>
<source lang=xml>
Строка 116: Строка 105:
</source>
</source>


* ресурсы приложения - доступны повсеместно (как правило задаются в отдельном словаре ресурсов)
* ресурсы приложения — доступны повсеместно (как правило задаются в отдельном словаре ресурсов)


=== Графика ===
=== Графика ===
WPF представляет обширный, масштабируемый и гибкий набор графических возможностей:
WPF представляет обширный, масштабируемый и гибкий набор графических возможностей:
* Графика, не зависящая от разрешения и устройства. Основной единицей измерения в графической системе WPF является аппаратно-независимый пиксель, который составляет 1/96 часть дюйма независимо от фактического разрешения экрана.
* Графика, не зависящая от разрешения и устройства. Основной единицей измерения в графической системе WPF является аппаратно-независимый пиксель, который составляет 1/96 часть дюйма независимо от фактического разрешения экрана.
* Дополнительная поддержка графики и анимации. WPF упрощает программирование графики за счет автоматического управления анимацией. Разработчик не должен заниматься обработкой сцен анимации, циклами отрисовки и билинейной интерполяцией
* Дополнительная поддержка графики и анимации. WPF упрощает программирование графики за счет автоматического управления анимацией. Разработчик не должен заниматься обработкой сцен анимации, циклами отрисовки и билинейной интерполяцией
* Аппаратное ускорение. Графическая система WPF использует преимущества графического оборудования, чтобы уменьшить использование ЦП.
* Аппаратное ускорение. Графическая система WPF использует преимущества графического оборудования, чтобы уменьшить использование ЦП.


Строка 130: Строка 119:


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

== Версии ==
== Версии ==
* WPF 3.0 (Ноябрь 2006)
* WPF 3.0 (Ноябрь 2006)
* WPF 3.5 (Ноябрь 2007)
* WPF 3.5 (Ноябрь 2007)
* WPF 3.5 SP1 (Август 2008)
* WPF 3.5 SP1 (Август 2008)
Строка 139: Строка 129:
* WPF 4.5.1 (Октябрь 2013)
* WPF 4.5.1 (Октябрь 2013)
* WPF 4.5.2 (Май 2014)
* WPF 4.5.2 (Май 2014)
* WPF 4.6 (Июль 2015)
* WPF 4.6 (Июль 2015)

== См. также ==
== См. также ==
* [[Silverlight]]
* [[Silverlight]]
Строка 179: Строка 170:
* {{книга
* {{книга
|заглавие = Illustrated WPF
|заглавие = Illustrated WPF
|ссылка = https://archive.org/details/illustratedwpf0000soli
|оригинал =
|оригинал =
|автор = Daniel M. Solis
|автор = Daniel M. Solis
Строка 191: Строка 183:
== Ссылки ==
== Ссылки ==
* [http://msdn.microsoft.com/ru-ru/library/ms754130.aspx MSDN Library — Windows Presentation Foundation]
* [http://msdn.microsoft.com/ru-ru/library/ms754130.aspx MSDN Library — Windows Presentation Foundation]
* [http://technet.microsoft.com/ru-ru/library/ms742562(VS.90).aspx Общие сведения о графике, анимации и мультимедиа WPF]
* [https://technet.microsoft.com/ru-ru/library/ms742562(VS.90).aspx Общие сведения о графике, анимации и мультимедиа WPF]


== Примечания ==
== Примечания ==
Строка 197: Строка 189:


{{dotNET}}
{{dotNET}}
{{Свободное и открытое программное обеспечение Microsoft}}


{{Инструментарии виджетов}}
{{Инструментарии виджетов}}


[[Категория:Microsoft Windows]]
[[Категория:Программные интерфейсы Microsoft]]
[[Категория:Программные интерфейсы Microsoft]]

Текущая версия от 12:24, 20 октября 2024

WPF в составе .NET Framework

Windows Presentation Foundation (WPF) — аналог WinForms, система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), использующая язык разметки XAML[1].

WPF предустановлена в Windows Vista (.NET Framework 3.0), Windows 7 (.NET Framework 3.5 SP1), Windows 8 (.NET Framework 4.0 и 4.5), Windows 8.1 (.NET Framework 4.5.1) и Windows 10 (.NET Framework 4.7). С помощью WPF можно создавать широкий спектр как автономных, так и запускаемых в браузере приложений[2].

Особенности технологии

[править | править код]

В основе WPF лежит векторная система визуализации, не зависящая от разрешения устройства вывода и созданная с учётом возможностей современного графического оборудования. WPF предоставляет средства для создания визуального интерфейса, включая язык XAML (eXtensible Application Markup Language), элементы управления, привязку данных, макеты, двухмерную и трёхмерную графику, анимацию, стили, шаблоны, документы, текст, мультимедиа и оформление[2].

Графической технологией, лежащей в основе WPF, является DirectX, в отличие от Windows Forms, где используется GDI/GDI+[3]. Производительность WPF выше, чем у GDI+ за счёт использования аппаратного ускорения графики через DirectX.

Также существует урезанная версия CLR, называющаяся WPF/E, она же известна как Silverlight.

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

[править | править код]

XAML представляет собой язык декларативного описания интерфейса, основанный на XML. Также реализована модель разделения кода и дизайна, позволяющая кооперироваться программисту и дизайнеру. Кроме того, есть встроенная поддержка стилей элементов, а сами элементы легко разделить на элементы управления второго уровня, которые, в свою очередь, разделяются до уровня векторных фигур и свойств/действий. Это позволяет легко задать стиль для любого элемента, например, Button (кнопка).

Средства разработки

[править | править код]

Для работы с WPF требуется любой .NET-совместимый язык. В этот список входит множество языков: C#, F#, VB.NET, C++, Ruby, Python, Delphi (Prism), Lua и многие другие. Для полноценной работы может быть использована как Visual Studio, так и Expression Blend. Первая ориентирована на программирование, а вторая — на дизайн и позволяет делать многие вещи, не прибегая к ручному редактированию XAML. Примеры этому — анимация, стилизация, состояния, создание элементов управления и так далее.

Возможности

[править | править код]

WPF предоставляет широкий спектр возможностей по созданию интерактивных настольных приложений:

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

[править | править код]

Это гибкий механизм, который позволяет через расширения разметки XAML связывать различные данные (от значений свойств элементов управления до общедоступных свойств, реализующих поля базы данных через Entity Framework). Привязка данных представлена классом Binding, который в свою очередь унаследован от MarkupExtension, что позволяет использовать привязки не только в коде, но и в разметке:

<StackPanel Orientation="Horizontal">
   <Slider x:Name="slider" Width="200" Minimum="1" Maximum="100" Value="60"/>        
   <TextBox Text="{Binding ElementName=slider, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>

Помимо основного класса Binding в WPF реализовано еще несколько механизмов привязок:

  • MultiBinding — позволяет создавать множественные привязки, указывая несколько элементов
  • TemplateBinding — используется в шаблонах для связывания свойства элемента внутри шаблона со свойством элемента, к которому применен шаблон
  • PriorityBinding — ранжирует список привязок и выбирает из них свойство (согласно приоритету) к которому будет применена привязка. Если привязка, имеющая наивысший приоритет успешно возвращает значение, то нет необходимости обрабатывать другие привязки в списке.

Позволяют создавать стилевое оформление элементов и, как правило, используются только в разметке:

<Button>       
   <Button.Style>           
      <Style TargetType="Button">
          <Setter Property="FontSize" Value="20"/>                
          <Setter Property="Foreground" Value="LimeGreen"/>           
      </Style>       
   </Button.Style>    
</Button>

Если стиль задается в ресурсах (например в словаре ресурсов), то можно использовать атрибут x:Key для указания уникального ключа. Затем в элементе управления, к которому необходимо применить стиль, нужно использовать расширение разметки StaticResource для связывания с этим стилем. Если использовать этот прием, то стили не будут нагромождать разметку.

Шаблоны элементов управления

[править | править код]

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

Простой пример круглой кнопки:

   <Button Content="Hey!" Background="LimeGreen" Foreground="White">        
      <Button.Template>            
         <ControlTemplate TargetType="Button">                
            <Grid>                    
               <Ellipse Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" Stretch="Fill"/>                   
               <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>                
            </Grid>            
         </ControlTemplate>        
      </Button.Template>   
   </Button>

Шаблоны данных

[править | править код]

В отличие от шаблонов элементов управления, задаются для определенного контекста данных (который в блочных элементах управления задается через свойство DataContext, а в списковых через ItemsSource). Сам шаблон данных представлен классом DataTemplate. Для обозначения типа данных, к которому необходимо применить шаблон, используется свойство DataType.

Система ресурсов позволяет объединять шаблоны, стили, кисти, анимацию и многие другие интерактивные элементы, что существенно упрощает работу с ними. Ресурсы задаются в свойстве Resources класса FrameworkElement, от которого унаследованы все элементы управления, панели компоновки и даже класс Application. Это позволяет создавать многоуровневую систему ресурсов:

  • ресурсы внутри объекта — действительны только для этого объекта
  • ресурсы внутри панели компоновки (например Grid) — позволяет задать границу контекста ресурсов на уровне этой панели
  • ресурсы внутри окна Window — если в приложении используется несколько окон, то ресурсы одного окна не будут доступны ресурсам другого окна
   <Window.Resources>
        <SolidColorBrush x:Key="SampleBrush" Color="LimeGreen"/>
    </Window.Resources>

    ...

    <Button Content="Hey!" Background="{StaticResource SampleBrush}" />
  • ресурсы приложения — доступны повсеместно (как правило задаются в отдельном словаре ресурсов)

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

  • Графика, не зависящая от разрешения и устройства. Основной единицей измерения в графической системе WPF является аппаратно-независимый пиксель, который составляет 1/96 часть дюйма независимо от фактического разрешения экрана.
  • Дополнительная поддержка графики и анимации. WPF упрощает программирование графики за счет автоматического управления анимацией. Разработчик не должен заниматься обработкой сцен анимации, циклами отрисовки и билинейной интерполяцией
  • Аппаратное ускорение. Графическая система WPF использует преимущества графического оборудования, чтобы уменьшить использование ЦП.
Двухмерная графика
[править | править код]

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

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

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

[править | править код]

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

  • WPF 3.0 (Ноябрь 2006)
  • WPF 3.5 (Ноябрь 2007)
  • WPF 3.5 SP1 (Август 2008)
  • WPF 4 (Апрель 2010)
  • WPF 4.5 (Август 2012)
  • WPF 4.5.1 (Октябрь 2013)
  • WPF 4.5.2 (Май 2014)
  • WPF 4.6 (Июль 2015)

Литература

[править | править код]
  • Мэтью Мак-Дональд. WPF: Windows Presentation Foundation в .NET 4.5 с примерами на C# 5.0 для профессионалов, 4-е издание = Pro WPF 4.5 in C# 2012: Windows Presentation Foundation in .NET 4.5, 4th edition. — М.: «Вильямс», 2013. — 1024 с. — ISBN 978-5-8459-1854-3.
  • Мэтью Мак-Дональд. WPF: Windows Presentation Foundation в .NET 4.0 с примерами на C# 2010 для профессионалов = Pro WPF in C# 2010: Windows Presentation Foundation with .NET 4.0. — М.: «Вильямс», 2011. — С. 1024. — ISBN 978-5-8459-1657-0.
  • Андерсон, Крис. Основы Windows Presentation Foundation. — СПб.: БХВ-Петербург, 2008. — 432 с. — ISBN 978-5-9775-0265-8.
  • Daniel M. Solis. Illustrated WPF. — United States of America: Apress, 2009. — 508 с. — ISBN 978-1-4302-1910-1.

Примечания

[править | править код]
  1. Произносится как «замл»
  2. 1 2 MSDN. Введение в WPF. Microsoft. Дата обращения: 15 ноября 2010. Архивировано 14 февраля 2012 года.
  3. Мэтью Мак-Дональд. WPF: Windows Presentation Foundation в .NET 3.5 с примерами на C# 2008 для профессионалов = Pro WPF in C# 2008: Windows Presentation Foundation with .NET 3.5. — 2-е. — М.: «Вильямс», 2008. — С. 25. — 928 с. — ISBN 978-5-8459-1429-3.