Методология синхронной разработки приложения в Microsoft Visual Studio 2010

Silverlight и WPF в Visual Studio 2010

Разбить на страницы
Показывать лекцию целиком

Цель лекции: рассмотреть новые средства WPF версии 4. Показать какая поддержка появилась в Microsoft Visual Studio 2010 для удобства и эффективного программирования с применением технологии WPF.

Новые возможности WPF 4

WPF история становления

WPF 4 — относительно новая технология. Частично она входила в несколько выпусков .NET и постепенно совершенствовалась.

WPF 3.0

Первая версия WPF вышла вместе с двумя другими технологиями: Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF). Все вместе это называлось .NET 3.0.

WPF 3.5

Год спустя, вышла новая версия WPF, как часть .NET Framework 3.5. Новые средства WPF в основном были слегка усовершенствованы, включая исправление ошибок и повышение производительности.

WPF 3.5 SP1

Когда вышел пакет обновлений .NET Framework Service Pack 1 (SP1), проектировщики WPF получили возможность добавить некоторые новые средства, подобные сглаженной графике (благодаря построителям текстуры) и изощренному элементу управления DataGrid.

WPF 4

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

Visual Studio 2010 и WPF

Вся "обстановка" в IDE реализована на WPF. Буквально все рамки и украшения документа, и служебные окна являются частью "визуального дерева" (Visual Tree) WPF. В него включены главное меню, панели инструментов, контекстные меню и панель статуса. Документ в целом - по сути, вся система управления окном - тоже WPF, включая оверлейные слои, которые появляются при перетаскивании окон. Обновленная стартовая страница (Start Page) также полностью реализована на WPF и, при желании, Вы можете написать свою собственную замену стартовой странице на XAML. Новый редактор текста, который был создан с нуля с использованием WPF. Использование WPF в редакторе открывает для разработчиков возможности усовершенствования редактора путем создания впечатляющих расширений написанием всего нескольких строк кода. Несколько других часто используемых текстовых окон, такие, как "Вывод даннах" (Output) и "Cписок найденного" (Find Results List) также базируются на новом текстовом редакторе.

Небольшой, но важной функцией для Visual Studio является возможность создания основного окна WPF, не показывая его. Он используется в ситуациях, когда Visual Studio создается программно, например, в режиме "Design Time Extensibility" или при сборке приложения в режиме командной строки.

Для взаимодействия с меню и панелями инструментов с клавиатуры в Visual Studio использует новую функцию WPF "режим меню" (MenuMode). Она позволяет перенаправить сообщения в меню или панель инструментов без "кражи" фокуса ввода у активного в данный момент элемента. Без этой функции некоторые сценарии в Visual Studio было бы невозможно осуществить на практике с использованием WPF.

Поддержка множества целевых платформ

В прошлом каждая версия Visual Studio была тесно привязана к определенной версии .NET. Версия Visual Studio 2010 свободна от этого ограничения и позволяет проектировать приложения, ориентированные на любую версию .NET— от 2.0 до 4. Хотя очевидно невозможно создать приложение WPF для .NET 2.0, в версиях .NET 3.0 и 3.5 поддержка WPF имеется. Выбор в качестве целевой платформы .NET 3.0 обеспечивает наиболее широкую совместимость (т.к. приложения .NET 3.0 могут работать под управлением исполняющих сред .NET 3.0, 3.5 и 4). Выбор в качестве целевой платформы .NET 3.5 или .NET 4 открывает доступ к новейшим средствам WPF, имеющимся в .NET.

При создании нового проекта в Visual Studio можно выбирать целевую версию .NET Framework в раскрывающемся списке, который расположен в верхней части диалогового окна New Project (Новый проект) прямо над списком шаблонов проектов (рис. 6.1).

(рис 6.1) Выбор целевой версии .NET Framework

Целевую версию можно изменить в любой момент позже, дважды щелкнув на узле Properties (Свойства) в окне Solution Explorer (Проводник решения) и изменив выбор в списке Target Framework (Целевая платформа).

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

IntelliSense и проверки ошибок, гарантируя, что вы не сможете использовать элементы управления, классы или члены, которые не доступны в выбранной версии .NET. Эти метаданные также используются для определения того, что должно появиться в окне Properties (Свойства) и браузере объектов (Object Browser), и т.д., гарантируя, что вся IDE-среда будет ограничена выбранной версией .NET.

Клиентский профиль .NET

Как ни странно, доступны два способа выбрать в качестве цели WPF 4. Первый способ — построить приложение, которое требует стандартной установки полной платформы .NET Framework 4. Второй способ — построить приложение, которому требуется .NET Framework 4 Client Profile (Клиентский профиль .NET Framework 4).

Клиентский профиль — это подмножество .NET Framework, которое требуется многофункциональным клиентским приложениями вроде WPF. Сюда не входят средства серверной стороны, такие как ASP.NET, отладчики, средства разработки, компиляторы кода и унаследованные средства (подобные поддержке баз данных Oracle). Более важно то, что клиент имеет меньший размер, требуя загрузки около 30 Мбайт, в то время как полный комплект распространения .NET Framework занимает около 100 Мбайт. Естественно, если приложение ориентировано на .NET Framework 4 Client Profile, оно без проблем будет работать под управлением полной версии .NET Framework. Концепция клиентского профиля появилась в .NET 3.5 SP1. Однако в ней по-прежнему присутствуют несколько моментов, которые мешают ей стать стандартом. В .NET 4 были проведены работы по тонкой настройке средств, включаемых в комплект клиентского профиля, предполагая сделать его стандартным выбором для любого приложения. В Visual Studio 2010 большинство проектов автоматически нацелены на .NET Framework 4 Client Profile. (Именно это вы получаете, выбирая .NET Framework 4 в диалоговом окне New Project.) Изменив настройку Target Framework (Целевая платформа) в свойствах проекта, можно увидеть более подробный список, который имеет отдельные опции для полной версии .NET Framework 4 и .NET Framework 4 Client Profile.

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

  • Windows Vista включает .NET Framework 3.0.
  • Windows 7 включает .NET Framework 3.5 SP1.
  • .NET Framework 4 Client Profile является рекомендуемым обновлением (через службу Windows Update) для Windows Vista и Windows 7. Для компьютеров Windows XP оно является необязательным.
  • Визуальный конструктор Visual Studio

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

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

    Часть профессиональных разработчиков используют Visual Studio, часть — Expression Blend, есть те, кто пишет код XAML вручную, а есть те, кто применяет комбинацию перечисленных методов с последующим конфигурированием в визуальном конструкторе Visual Studio.

    Новые средства WPF 4

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

    Семейство элементов WPF продолжает расти. Теперь оно включает профессионально выглядящий DataGrid, стандартные DataPicker и Calendar и встроенный WebBrowser для просмотра HTML-разметки и веб-серфинга. Отдельная загрузка также добавляет полезный элемент управления Ribbon, который придает приложениям современный вид.

    Диспетчер визуального состояния

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

    Поддержка Multitouch

    С представлением мультитач ввода и поддержки манипулированием обработки, WPF 4 предоставляет отличный способ добавить пикантности в ваше клиентское приложение в Windows 7. Появились новые события манипуляции и инерции:

  • Multitouch события Manipulation, Inertia (Pan, Zoom, Rotate) над UIElement
  • Простые Multitouch события (Up, Move, Down) над UIElement, UIElement3D и ContentElement
  • Захват нескольких элементов управления
  • Поддержка Multitouch в ScrollViewer
  • Расширяемость сенсорных устройств
  • Чтобы начать работать с Multitouch, нужно ознакомиться с новыми событиями, которые добавили в классы UIElement, UIElement3D и ContentElement.

    Windows 7 Shell Intergration

    Теперь запросто можно добавлять поддержку всех красивостей и удобностей от Windows 7 в приложение. Для этого нам нужно обратиться к пространству имен System.Windows.Shell и посмотреть, что же он нам предлагает.

    TaskbarItemInfo

    Он предлагает управляемую обертку для Taskbar в среде Windows 7. У класса Window появилось свойство (dependency) TaskbarItemInfo, которому и необходимо установить объект типа TaskbarItemInfo (можно как в XAML - декларативно, так и программно). При помощи свойства ThumbnailClipMargin можно установить, какая часть окна будет отображена в Preview окна на taskbar (показывается при наведении, если включено Aero), то есть можно отображать не все окно, а, например, только значимую необходимую часть. Более того TaskbarItemInfo позволяет отобразить функциональные клавиши в том же Preview (ThumbButtonInfos), а также отобразить какой-нибудь свой элемент над иконкой на Taskbar (Overlay), и состояние длительного процесса (ProgressValue и ProgressState). На рис. 6.2 вы можете видеть как будет это выглядеть (пример с MSDN)

    (рис 6.2) Применение TaskbarItemInfo

    JumpList

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

    Windows 7 shell integration

    Полезное дополнение, но так как в основном мы все программируем для корпоративных клиентов, то на него нужно смотреть как на возможность дополнения функциональности приложения, если у пользователя стоит Windows 7. Так, если мы как-то отображаем долгий процесс, то почему бы и не отобразить его при помощи TaskbarItemInfo в дополнение: тогда играющий в косынку менеджер всегда сможет заметить, когда программа закончила формировать отчет или выполнила какую либо задачу. Но вот вынести часто используемые файлы просто в JumpList не достаточно, так как мы ограничим пользователей, которые используют более ранние версии Windows, а о них тоже стоит подумать.

    Updated File Dialogs

    В предыдущих версиях окна выбора файлов, директорий и т.п. выглядели в стиле WinXP, теперь же окна полностью соответствуют ОС, в которой запущено приложение, а точнее диалоги выбора файлов в Windows 7 выглядят, как в Windows 7.

    Custom Dictionary

    В WPF, как вы знаете, есть поддержка проверки правописания SpellCheck. А может и не знаете, потому что поддерживаются только 4 языка: английский, немецкий, испанский и французский, и расширить это никак нельзя. В WPF 4.0 появилась возможность заводить Custom Dictionary, чтобы добавлять всяческие слова, вроде lol, в лексикон проверки. Но опять же, сделать проверку русского языка при помощи этого нельзя, даже если вы забьете всевозможные русские слова в такой словарь, то изначально вам WPF скажет, что данный язык не поддерживается. Более подробная информация об этом тут: http://blogs.msdn.com/b/text/archive/2009/10/02/custom-dictionaries.aspx.

    Графика

    Шейдеры

    Как и должно быть: новый WPF и поддержка новых шейдеров, теперь поддерживаются шейдеры версии 3.0. Опять же, нужно не забывать, что существуют компьютеры и без поддержки шейдеров версии 3.0 – для этого введен дополнительный набор методов для определения версии шейдеров, поддерживаемых системой, в классе RenderCapability. В сети достаточно примеров написанных эффектов, один из них был Grayscale эффект, который из цветной фотографии делал ч/б – использовали в проекте для toolbar’a – все иконки делали ч/б, и только при наведении они приобретали цвет (позаимствовали идею у Photoshop).

    Кеширование графики

    С графикой также связаны нововведения, которые позволят повысить производительность наших приложений. Теперь у класса UIElement есть свойство Cachemode, которому мы можем установить объект типа BitmapCache. Полезно это будет, в основном, когда ваше приложение использует множество элементов, описанных декларативно при помощи Path, тогда вы можете задать кеш для этого элемента, с указанием масштаба, при котором данные векторно прорендериться. Посмотреть пример можно на MSDN http://msdn.microsoft.com/en-us/library/ee230083(VS.100).aspx, где в векторе нарисована алюминиевая банка, у которой постоянно меняют масштаб. Основа этого примера в строках

    <Canvas.Cachemode>
        <BitmapCache EnableClearType="False" 
                     RenderAtScale="1" 
                     SnapsToDevicePixels="False"/>
    </Canvas.Cachemode>

    Проще некуда, осталось только найти места в приложениях, где это может повысить производительность. Также знакомимся с классом BitmapCacheBrush, который также должен нам значительно повысить производительность приложения при должном использовании. Он нам понадобится в случае, если мы какой-то элемент отображаем несколько раз в одном окне. Например, это может быть иконка в DataGridView: теперь ее один раз можно отрендерить, сделать кеш при помощи BitmapCache в ресурсах, а затем просто продублировать уже закешированную картинку при помощи BitmapCacheBrush. Опять же, на MSDN есть хороший пример на эту тему: http://msdn.microsoft.com/en-us/library/ee230085(VS.100).aspx.

    Layout Rounding

    Следующим нововведением в WPF является LayoutRounding. Новое в WPF, но уже старое в Silverlight. Сложно ответить чем UseLayoutRounding лучше SnapsToDevicePixels. Вообще идея двух этих свойств разная, но эффект иногда получается один и тот же, но в разработке лучше привязываться к Layout Rounding и использовать только его, он более интуитивно понятен. Более подробную информацию можно получить здесь: http://blogs.msdn.com/b/text/archive/2009/08/27/layout-rounding.aspx.

    Новые функции для анимации

    Дискретная, линейная и сплайновая анимация уже поддерживается предыдущими версиями WPF. WPF 4 представляет новый концепт "Easing Functions", которые позволяют разработчикам создавать различную анимацию. Например, пружинистые движения или добавить упреждение в анимацию. Функции упрощения (Easing Functions) определяют способ анимации от начала и до конца. Встроенные функции упрощения предоставляют спектр режимов в анимации: круговой, экспоненциальной, эластичной и пружинистой. Функции упрощения спроектированы легко расширяемыми, позволяя разработчикам создавать собственные. Благодаря данному нововведения, дизайнеры могут без усилий создавать плавную и органичную анимацию.

    Усовершенствования двухмерной графики

    Теперь визуальное представление каждого элемента может быть радикально изменено посредством эффектов в духе PhotoShop — через построители текстур. Разработчики, которые желают манипулировать индивидуальными пикселями вручную, могут также генерировать и модифицировать изображения с помощью класса WriteableBitmap.

    Текст

    CaretBrush и SelectionBrush

    Теперь у каретки и для выделения можно задать кисти:

    <TextBox FontSize="24" CaretBrush="Green" SelectionOpacity="0.1"  
             SelectionBrush="Red">
        Hello, Hello, Hello
    </TextBox>

    И получить результат, который изображен на рис. 6.3

    (рис 6.3) Эффект применения CaretBrush и SelectionBrush

    ClearTypeHint

    Очередная заклепка в WPF – свойство RenderOptions.ClearTypeHint. Идея в следующем, если в вашем визуальном дереве на каком-то шаге используется, например, Opacity, то все визуальное дерево ниже уровнем будет прорисовывать текст без ClearType. Из-за этого текст будет выглядеть значительно иным (рис 6.4):

    (рис 6.4) Эффект свойства RenderOptions.ClearTypeHint

    Другим примером может быть, если вы у Grid'а будете использовать свойство Clip. Свойством RenderOptions.ClearTypeHint можно задать Enabled – для того, чтобы текст все-таки прорисовался с ClearType (если он рисуется без Opacity). Хороший пример для ознакомления приводится тут: http://blogs.msdn.com/b/llobo/archive/2009/10/28/new-wpf-features-cleartypehint.aspx

    TextFormattingMode и TextRenderingMode

    Теперь мы можем действительно управлять тем, как будет отрисовываться текст. Для этого нам предоставили два свойства TextOptions.TextFormattingMode и TextOptions.TextRenderingMode. Первому можно установить Ideal – текст будет выглядеть как обычно в WPF, или Display – будет выглядеть как текст GDI. Display советуют применять только с мелким текстом, в остальных случаях оставить как есть. Разница в чтении мелкого текста заметна (рис. 6.5):

    (рис 6.5) Демонстрация работы свойств TextOptions.TextFormattingMode

    Так же новый стек поддерживает явно выбираемые режимы прорисовки текста: aliased, grayscale, ClearType. Новый текстовый стек позволяет оптимизировать текстовую привязку для анимации и статики. Вдобавок, новый текстовый стек поддерживает шрифты с встроенными картами изображений, что позволяет многим восточно-азиатским шрифтам прорисовываться с чёткостью, к которой привыкли пользователи Win32.

    XAML

    Built in Types

    В XAML добавилась возможность использовать стандартные типы .NET в разметке без указания лишних namespace, для чего это стало нужно, видно в нижеописанных возможностях. Если раньше для описания в XAML объекта типа string приходилось писать:

    <s:String xmlns:s="clr-namespace:System;assembly=mscorlib"> Foo </s:String>

    Теперь же

    <x:String > Foo </x:String>

    Поддержка Generics

    Этого давно не хватало, а именно с выпуска первого WPF. Как часто хотелось объявить в XAML ObservableCollection с типом вроде Person, а для этого нам приходилось создавать новый тип и наследовать его от коллекции, либо инкапсулировать ее:

    class PersonCollection:ObservableCollection<Person>{}

    и уже этот новый класс объявлять в ресурсах:

    <l:PersonCollection>
        <Person Name="Tom" />
    </l:PersonCollection>

    Теперь же этого можно избежать, теперь в XAML можно объявлять и инициализировать generics следующим образом:

    <ObservableCollection 
           x:TypeArguments='local:Person' 
           xmlns='clr-namespace:System.Collections.ObjectModel;assembly=System'  >
          <local:Person Name='Tom' Age='21' />
    </ObservableCollection>

    FactoryMethod\Arguments

    Еще одна возможность, которую хотели уже давно. Возможность использовать методы для инициализации объектов, а также конструкторы, которые принимают параметры. Для того, чтобы создать объект такого типа:

    public class Person 
    {
        public Person (string name, int age)
        {
            Name = name;
            Age = age;
        }
     
        public string Name {get;set;}
        public int Age {get;set;}
    }

    В XAML теперь можно написать

    <local:Person>
        <x:Arguments>
            <x:String>Tom</x:String>
            <x:Int32>21</x:Int32>  
        </x:Arguments> 
    </local:Person>

    Более того, для создания объекта теперь можно использовать FactoryMethod, самый простой пример – это Guid.NewGuid():

    <p:Guid x:FactoryMethod='NewGuid'/>

    Или более сложный пример с передачей параметров:

    <coll:List x:Key='list' x:TypeArguments='x:String' 
               x:FactoryMethod='local:Factory.CreateStringList'>
        <x:Arguments>
            <x:String>Mickey,Donald</x:String>
        </x:Arguments>
    </coll:List>

    Named Object References

    Тут все просто, такой биндинг:

    <Label Target='{Binding ElementName=firstNameBox}' >_Target</Label>
    <TextBox Name='firstNameBox'>Uses Binding</TextBox>

    Теперь можно записать при помощи x:Reference

    <Label Target= '{x:Reference secondNameBox}'>_Second Target</Label>

    Или даже так:

    <Label Target= 'thirdNameBox' >_Third Target</Label>

    Binding to Dynamic Objects

    .NET 4 приходит вместе с dynamic, потому и в WPF добавили возможность биндить к свойствам dynamic объектов. Если мы установим такие свойства у объекта:

    dynamic dynamicObj = BindPanel.DataContext ;
    dynamicObj.A = "Simple Binding";
    dynamicObj.B = new DynamicObjectClass(); 
    dynamicObj.B.C = "Nested Prop Binding";
    dynamicObj.AddItem("item 0");
    dynamicObj[0] = "Indexer Binding";

    То мы запросто можем установить такой биндинг:

    <StackPanel Name="BindPanel" DataContext="{StaticResource MyDynamicObject}">
            <TextBox Text="{Binding Path=A}"/>
            <TextBlock Text="{Binding Path=B.C}" />
            <TextBox  Text="{Binding Path=[(x:Int32)0]}"/>
    </StackPanel>

    Эта возможность тоже даст пищу для размышлений. Теперь можно придумать о быстрой реализации биндинга к DataSet или XMLDocument.

    Node Loop flexibility

    Как известно в .NET 4 появилась отдельная библиотека System.Xaml, позволяющая нам обрабатывать Xaml разметку, считывать и превращать в граф объектов. Раньше у нас была возможность так же работать с Xaml разметкой при помощи XamlReader и XamlWriter, но все что они нам давали – это считывать и записывать Xaml, но не предоставляли нам возможность работать с ним. Теперь же набор классов для работы с Xaml пополнился, например, XamlXmlReader, который позволяет пробегаться еще и по элементам xaml дерева. Пример можно посмотреть здесь http://blogs.msdn.com/b/llobo/archive/2009/11/09/ xaml-2009-features-node-loop-flexibility.aspx, в данном примере у считываемого Xaml файла заменяют родительский элемент Window на Page.

    Key\Gesture Binding

    Появилась возможность биндить Key и Modifiers в KeyBinding. Теперь можно создать свою DelegateCommand со свойствами

    public Key GestureKey { get; set; }
    public ModifierKeys Gesturemodifier { get; set; }
    public MouseAction MouseGesture { get; set; }

    Инициализировать команду следующим образом

    public ICommand ExitCommand
    {
        get
        {
            if (exitCommand == null)
            {
                exitCommand = new DelegateCommand(Exit);
                exitCommand.GestureKey = Key.X;
                exitCommand.Gesturemodifier = ModifierKeys.Control;
                exitCommand.MouseGesture = MouseAction.LeftDoubleClick;
            }
            return exitCommand;    
        }
    }

    А дальше забиндить клавиши:

    <Window.InputBindings>
        <KeyBinding Command="{Binding ExitCommand}" 
                    Key="{Binding ExitCommand.GestureKey}"
                    Modifiers="{Binding ExitCommand.Gesturemodifier}"/>
    </Window.InputBindings>

    Без необходимости объявления ресурсов.

    Ключевые термины

    GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры.

    IDE (англ. Integrated Development Environment) — система программных средств, используемая программистами для разработки программного обеспечения.

    IntelliSense — технология автодополнения Microsoft, наиболее известная в Microsoft Visual Studio. Дописывает название функции при вводе начальных букв. Кроме прямого назначения IntelliSense используется для доступа к документации и для устранения неоднозначности в именах переменных, функций и методов, используя рефлексию.

    Windows Communication Foundation (WCF) — программный фреймворк, используемый для обмена данными между приложениями входящими в состав .NET Framework. До своего выпуска в декабре 2006 года в составе .NET Framework 3.0, WCF был известен под кодовым именем Indigo.

    Windows Workflow Foundation (WF) представляет собой технологию компании Microsoft для определения, выполнения и управления рабочими процессами (англ. workflow). Данная технология входит в состав .NET Framework 3.0, который изначально установлен в Windows Vista и может быть установлен в Windows 2003 Server и Windows XP SP2. WF ориентирована на визуальное программирование и использует декларативную модель программирования.

    Шейдер (англ. Shader) — это программа для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.

    Краткие итоги

    Как видно из вышеизложенного, появилось масса нововведений в WPF 4.0. Можно сказать, что WPF — это одно из ведущих направлений Windows-приложений. Со временем WPF превратится в систему, подобную User32 и GDI/GDI+, к которой будут добавляться новые расширения и высокоуровневые средства. В конечном итоге WPF позволит проектировать приложения, которые было бы невозможно (или, по крайней мере, непрактично) построить средствами Windows Forms.

    Набор для практики

    Вопросы:

  • Назовите основные нововведения Visual Studio 2010 касающиеся разработки WPF/Silverlight приложений.
  • Перечислите новые средства WPF 4.
  • Назначение клиентского профиля.
  • Назовите новые и доработанные графикические возможности WPF 4
  • Ключевые улучшения WPF 4 для XAML
  • Страницы:

    Цель лекции: рассмотреть новые средства WPF версии 4. Показать какая поддержка появилась в Microsoft Visual Studio 2010 для удобства и эффективного программирования с применением технологии WPF.

    Новые возможности WPF 4

    WPF история становления

    WPF 4 — относительно новая технология. Частично она входила в несколько выпусков .NET и постепенно совершенствовалась.

    WPF 3.0

    Первая версия WPF вышла вместе с двумя другими технологиями: Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF). Все вместе это называлось .NET 3.0.

    WPF 3.5

    Год спустя, вышла новая версия WPF, как часть .NET Framework 3.5. Новые средства WPF в основном были слегка усовершенствованы, включая исправление ошибок и повышение производительности.

    WPF 3.5 SP1

    Когда вышел пакет обновлений .NET Framework Service Pack 1 (SP1), проектировщики WPF получили возможность добавить некоторые новые средства, подобные сглаженной графике (благодаря построителям текстуры) и изощренному элементу управления DataGrid.

    WPF 4

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

    Visual Studio 2010 и WPF

    Вся "обстановка" в IDE реализована на WPF. Буквально все рамки и украшения документа, и служебные окна являются частью "визуального дерева" (Visual Tree) WPF. В него включены главное меню, панели инструментов, контекстные меню и панель статуса. Документ в целом - по сути, вся система управления окном - тоже WPF, включая оверлейные слои, которые появляются при перетаскивании окон. Обновленная стартовая страница (Start Page) также полностью реализована на WPF и, при желании, Вы можете написать свою собственную замену стартовой странице на XAML. Новый редактор текста, который был создан с нуля с использованием WPF. Использование WPF в редакторе открывает для разработчиков возможности усовершенствования редактора путем создания впечатляющих расширений написанием всего нескольких строк кода. Несколько других часто используемых текстовых окон, такие, как "Вывод даннах" (Output) и "Cписок найденного" (Find Results List) также базируются на новом текстовом редакторе.

    Небольшой, но важной функцией для Visual Studio является возможность создания основного окна WPF, не показывая его. Он используется в ситуациях, когда Visual Studio создается программно, например, в режиме "Design Time Extensibility" или при сборке приложения в режиме командной строки.

    Для взаимодействия с меню и панелями инструментов с клавиатуры в Visual Studio использует новую функцию WPF "режим меню" (MenuMode). Она позволяет перенаправить сообщения в меню или панель инструментов без "кражи" фокуса ввода у активного в данный момент элемента. Без этой функции некоторые сценарии в Visual Studio было бы невозможно осуществить на практике с использованием WPF.

    Поддержка множества целевых платформ

    В прошлом каждая версия Visual Studio была тесно привязана к определенной версии .NET. Версия Visual Studio 2010 свободна от этого ограничения и позволяет проектировать приложения, ориентированные на любую версию .NET— от 2.0 до 4. Хотя очевидно невозможно создать приложение WPF для .NET 2.0, в версиях .NET 3.0 и 3.5 поддержка WPF имеется. Выбор в качестве целевой платформы .NET 3.0 обеспечивает наиболее широкую совместимость (т.к. приложения .NET 3.0 могут работать под управлением исполняющих сред .NET 3.0, 3.5 и 4). Выбор в качестве целевой платформы .NET 3.5 или .NET 4 открывает доступ к новейшим средствам WPF, имеющимся в .NET.

    При создании нового проекта в Visual Studio можно выбирать целевую версию .NET Framework в раскрывающемся списке, который расположен в верхней части диалогового окна New Project (Новый проект) прямо над списком шаблонов проектов (рис. 6.1).

    (рис 6.1) Выбор целевой версии .NET Framework

    Целевую версию можно изменить в любой момент позже, дважды щелкнув на узле Properties (Свойства) в окне Solution Explorer (Проводник решения) и изменив выбор в списке Target Framework (Целевая платформа).

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

    IntelliSense и проверки ошибок, гарантируя, что вы не сможете использовать элементы управления, классы или члены, которые не доступны в выбранной версии .NET. Эти метаданные также используются для определения того, что должно появиться в окне Properties (Свойства) и браузере объектов (Object Browser), и т.д., гарантируя, что вся IDE-среда будет ограничена выбранной версией .NET.

    Клиентский профиль .NET

    Как ни странно, доступны два способа выбрать в качестве цели WPF 4. Первый способ — построить приложение, которое требует стандартной установки полной платформы .NET Framework 4. Второй способ — построить приложение, которому требуется .NET Framework 4 Client Profile (Клиентский профиль .NET Framework 4).

    Клиентский профиль — это подмножество .NET Framework, которое требуется многофункциональным клиентским приложениями вроде WPF. Сюда не входят средства серверной стороны, такие как ASP.NET, отладчики, средства разработки, компиляторы кода и унаследованные средства (подобные поддержке баз данных Oracle). Более важно то, что клиент имеет меньший размер, требуя загрузки около 30 Мбайт, в то время как полный комплект распространения .NET Framework занимает около 100 Мбайт. Естественно, если приложение ориентировано на .NET Framework 4 Client Profile, оно без проблем будет работать под управлением полной версии .NET Framework. Концепция клиентского профиля появилась в .NET 3.5 SP1. Однако в ней по-прежнему присутствуют несколько моментов, которые мешают ей стать стандартом. В .NET 4 были проведены работы по тонкой настройке средств, включаемых в комплект клиентского профиля, предполагая сделать его стандартным выбором для любого приложения. В Visual Studio 2010 большинство проектов автоматически нацелены на .NET Framework 4 Client Profile. (Именно это вы получаете, выбирая .NET Framework 4 в диалоговом окне New Project.) Изменив настройку Target Framework (Целевая платформа) в свойствах проекта, можно увидеть более подробный список, который имеет отдельные опции для полной версии .NET Framework 4 и .NET Framework 4 Client Profile.

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

  • Windows Vista включает .NET Framework 3.0.
  • Windows 7 включает .NET Framework 3.5 SP1.
  • .NET Framework 4 Client Profile является рекомендуемым обновлением (через службу Windows Update) для Windows Vista и Windows 7. Для компьютеров Windows XP оно является необязательным.
  • Визуальный конструктор Visual Studio

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

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

    Часть профессиональных разработчиков используют Visual Studio, часть — Expression Blend, есть те, кто пишет код XAML вручную, а есть те, кто применяет комбинацию перечисленных методов с последующим конфигурированием в визуальном конструкторе Visual Studio.

    Новые средства WPF 4

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

    Семейство элементов WPF продолжает расти. Теперь оно включает профессионально выглядящий DataGrid, стандартные DataPicker и Calendar и встроенный WebBrowser для просмотра HTML-разметки и веб-серфинга. Отдельная загрузка также добавляет полезный элемент управления Ribbon, который придает приложениям современный вид.

    Диспетчер визуального состояния

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

    Поддержка Multitouch

    С представлением мультитач ввода и поддержки манипулированием обработки, WPF 4 предоставляет отличный способ добавить пикантности в ваше клиентское приложение в Windows 7. Появились новые события манипуляции и инерции:

  • Multitouch события Manipulation, Inertia (Pan, Zoom, Rotate) над UIElement
  • Простые Multitouch события (Up, Move, Down) над UIElement, UIElement3D и ContentElement
  • Захват нескольких элементов управления
  • Поддержка Multitouch в ScrollViewer
  • Расширяемость сенсорных устройств
  • Чтобы начать работать с Multitouch, нужно ознакомиться с новыми событиями, которые добавили в классы UIElement, UIElement3D и ContentElement.

    Windows 7 Shell Intergration

    Теперь запросто можно добавлять поддержку всех красивостей и удобностей от Windows 7 в приложение. Для этого нам нужно обратиться к пространству имен System.Windows.Shell и посмотреть, что же он нам предлагает.

    TaskbarItemInfo

    Он предлагает управляемую обертку для Taskbar в среде Windows 7. У класса Window появилось свойство (dependency) TaskbarItemInfo, которому и необходимо установить объект типа TaskbarItemInfo (можно как в XAML - декларативно, так и программно). При помощи свойства ThumbnailClipMargin можно установить, какая часть окна будет отображена в Preview окна на taskbar (показывается при наведении, если включено Aero), то есть можно отображать не все окно, а, например, только значимую необходимую часть. Более того TaskbarItemInfo позволяет отобразить функциональные клавиши в том же Preview (ThumbButtonInfos), а также отобразить какой-нибудь свой элемент над иконкой на Taskbar (Overlay), и состояние длительного процесса (ProgressValue и ProgressState). На рис. 6.2 вы можете видеть как будет это выглядеть (пример с MSDN)

    (рис 6.2) Применение TaskbarItemInfo

    JumpList

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

    Windows 7 shell integration

    Полезное дополнение, но так как в основном мы все программируем для корпоративных клиентов, то на него нужно смотреть как на возможность дополнения функциональности приложения, если у пользователя стоит Windows 7. Так, если мы как-то отображаем долгий процесс, то почему бы и не отобразить его при помощи TaskbarItemInfo в дополнение: тогда играющий в косынку менеджер всегда сможет заметить, когда программа закончила формировать отчет или выполнила какую либо задачу. Но вот вынести часто используемые файлы просто в JumpList не достаточно, так как мы ограничим пользователей, которые используют более ранние версии Windows, а о них тоже стоит подумать.

    Updated File Dialogs

    В предыдущих версиях окна выбора файлов, директорий и т.п. выглядели в стиле WinXP, теперь же окна полностью соответствуют ОС, в которой запущено приложение, а точнее диалоги выбора файлов в Windows 7 выглядят, как в Windows 7.

    Custom Dictionary

    В WPF, как вы знаете, есть поддержка проверки правописания SpellCheck. А может и не знаете, потому что поддерживаются только 4 языка: английский, немецкий, испанский и французский, и расширить это никак нельзя. В WPF 4.0 появилась возможность заводить Custom Dictionary, чтобы добавлять всяческие слова, вроде lol, в лексикон проверки. Но опять же, сделать проверку русского языка при помощи этого нельзя, даже если вы забьете всевозможные русские слова в такой словарь, то изначально вам WPF скажет, что данный язык не поддерживается. Более подробная информация об этом тут: http://blogs.msdn.com/b/text/archive/2009/10/02/custom-dictionaries.aspx.

    Графика

    Шейдеры

    Как и должно быть: новый WPF и поддержка новых шейдеров, теперь поддерживаются шейдеры версии 3.0. Опять же, нужно не забывать, что существуют компьютеры и без поддержки шейдеров версии 3.0 – для этого введен дополнительный набор методов для определения версии шейдеров, поддерживаемых системой, в классе RenderCapability. В сети достаточно примеров написанных эффектов, один из них был Grayscale эффект, который из цветной фотографии делал ч/б – использовали в проекте для toolbar’a – все иконки делали ч/б, и только при наведении они приобретали цвет (позаимствовали идею у Photoshop).

    Кеширование графики

    С графикой также связаны нововведения, которые позволят повысить производительность наших приложений. Теперь у класса UIElement есть свойство Cachemode, которому мы можем установить объект типа BitmapCache. Полезно это будет, в основном, когда ваше приложение использует множество элементов, описанных декларативно при помощи Path, тогда вы можете задать кеш для этого элемента, с указанием масштаба, при котором данные векторно прорендериться. Посмотреть пример можно на MSDN http://msdn.microsoft.com/en-us/library/ee230083(VS.100).aspx, где в векторе нарисована алюминиевая банка, у которой постоянно меняют масштаб. Основа этого примера в строках

    <Canvas.Cachemode>
        <BitmapCache EnableClearType="False" 
                     RenderAtScale="1" 
                     SnapsToDevicePixels="False"/>
    </Canvas.Cachemode>

    Проще некуда, осталось только найти места в приложениях, где это может повысить производительность. Также знакомимся с классом BitmapCacheBrush, который также должен нам значительно повысить производительность приложения при должном использовании. Он нам понадобится в случае, если мы какой-то элемент отображаем несколько раз в одном окне. Например, это может быть иконка в DataGridView: теперь ее один раз можно отрендерить, сделать кеш при помощи BitmapCache в ресурсах, а затем просто продублировать уже закешированную картинку при помощи BitmapCacheBrush. Опять же, на MSDN есть хороший пример на эту тему: http://msdn.microsoft.com/en-us/library/ee230085(VS.100).aspx.

    Layout Rounding

    Следующим нововведением в WPF является LayoutRounding. Новое в WPF, но уже старое в Silverlight. Сложно ответить чем UseLayoutRounding лучше SnapsToDevicePixels. Вообще идея двух этих свойств разная, но эффект иногда получается один и тот же, но в разработке лучше привязываться к Layout Rounding и использовать только его, он более интуитивно понятен. Более подробную информацию можно получить здесь: http://blogs.msdn.com/b/text/archive/2009/08/27/layout-rounding.aspx.

    Новые функции для анимации

    Дискретная, линейная и сплайновая анимация уже поддерживается предыдущими версиями WPF. WPF 4 представляет новый концепт "Easing Functions", которые позволяют разработчикам создавать различную анимацию. Например, пружинистые движения или добавить упреждение в анимацию. Функции упрощения (Easing Functions) определяют способ анимации от начала и до конца. Встроенные функции упрощения предоставляют спектр режимов в анимации: круговой, экспоненциальной, эластичной и пружинистой. Функции упрощения спроектированы легко расширяемыми, позволяя разработчикам создавать собственные. Благодаря данному нововведения, дизайнеры могут без усилий создавать плавную и органичную анимацию.

    Усовершенствования двухмерной графики

    Теперь визуальное представление каждого элемента может быть радикально изменено посредством эффектов в духе PhotoShop — через построители текстур. Разработчики, которые желают манипулировать индивидуальными пикселями вручную, могут также генерировать и модифицировать изображения с помощью класса WriteableBitmap.

    Текст

    CaretBrush и SelectionBrush

    Теперь у каретки и для выделения можно задать кисти:

    <TextBox FontSize="24" CaretBrush="Green" SelectionOpacity="0.1"  
             SelectionBrush="Red">
        Hello, Hello, Hello
    </TextBox>

    И получить результат, который изображен на рис. 6.3

    (рис 6.3) Эффект применения CaretBrush и SelectionBrush

    ClearTypeHint

    Очередная заклепка в WPF – свойство RenderOptions.ClearTypeHint. Идея в следующем, если в вашем визуальном дереве на каком-то шаге используется, например, Opacity, то все визуальное дерево ниже уровнем будет прорисовывать текст без ClearType. Из-за этого текст будет выглядеть значительно иным (рис 6.4):

    (рис 6.4) Эффект свойства RenderOptions.ClearTypeHint

    Другим примером может быть, если вы у Grid'а будете использовать свойство Clip. Свойством RenderOptions.ClearTypeHint можно задать Enabled – для того, чтобы текст все-таки прорисовался с ClearType (если он рисуется без Opacity). Хороший пример для ознакомления приводится тут: http://blogs.msdn.com/b/llobo/archive/2009/10/28/new-wpf-features-cleartypehint.aspx

    TextFormattingMode и TextRenderingMode

    Теперь мы можем действительно управлять тем, как будет отрисовываться текст. Для этого нам предоставили два свойства TextOptions.TextFormattingMode и TextOptions.TextRenderingMode. Первому можно установить Ideal – текст будет выглядеть как обычно в WPF, или Display – будет выглядеть как текст GDI. Display советуют применять только с мелким текстом, в остальных случаях оставить как есть. Разница в чтении мелкого текста заметна (рис. 6.5):

    (рис 6.5) Демонстрация работы свойств TextOptions.TextFormattingMode

    Так же новый стек поддерживает явно выбираемые режимы прорисовки текста: aliased, grayscale, ClearType. Новый текстовый стек позволяет оптимизировать текстовую привязку для анимации и статики. Вдобавок, новый текстовый стек поддерживает шрифты с встроенными картами изображений, что позволяет многим восточно-азиатским шрифтам прорисовываться с чёткостью, к которой привыкли пользователи Win32.

    XAML

    Built in Types

    В XAML добавилась возможность использовать стандартные типы .NET в разметке без указания лишних namespace, для чего это стало нужно, видно в нижеописанных возможностях. Если раньше для описания в XAML объекта типа string приходилось писать:

    <s:String xmlns:s="clr-namespace:System;assembly=mscorlib"> Foo </s:String>

    Теперь же

    <x:String > Foo </x:String>

    Поддержка Generics

    Этого давно не хватало, а именно с выпуска первого WPF. Как часто хотелось объявить в XAML ObservableCollection с типом вроде Person, а для этого нам приходилось создавать новый тип и наследовать его от коллекции, либо инкапсулировать ее:

    class PersonCollection:ObservableCollection<Person>{}

    и уже этот новый класс объявлять в ресурсах:

    <l:PersonCollection>
        <Person Name="Tom" />
    </l:PersonCollection>

    Теперь же этого можно избежать, теперь в XAML можно объявлять и инициализировать generics следующим образом:

    <ObservableCollection 
           x:TypeArguments='local:Person' 
           xmlns='clr-namespace:System.Collections.ObjectModel;assembly=System'  >
          <local:Person Name='Tom' Age='21' />
    </ObservableCollection>

    FactoryMethod\Arguments

    Еще одна возможность, которую хотели уже давно. Возможность использовать методы для инициализации объектов, а также конструкторы, которые принимают параметры. Для того, чтобы создать объект такого типа:

    public class Person 
    {
        public Person (string name, int age)
        {
            Name = name;
            Age = age;
        }
     
        public string Name {get;set;}
        public int Age {get;set;}
    }

    В XAML теперь можно написать

    <local:Person>
        <x:Arguments>
            <x:String>Tom</x:String>
            <x:Int32>21</x:Int32>  
        </x:Arguments> 
    </local:Person>

    Более того, для создания объекта теперь можно использовать FactoryMethod, самый простой пример – это Guid.NewGuid():

    <p:Guid x:FactoryMethod='NewGuid'/>

    Или более сложный пример с передачей параметров:

    <coll:List x:Key='list' x:TypeArguments='x:String' 
               x:FactoryMethod='local:Factory.CreateStringList'>
        <x:Arguments>
            <x:String>Mickey,Donald</x:String>
        </x:Arguments>
    </coll:List>

    Named Object References

    Тут все просто, такой биндинг:

    <Label Target='{Binding ElementName=firstNameBox}' >_Target</Label>
    <TextBox Name='firstNameBox'>Uses Binding</TextBox>

    Теперь можно записать при помощи x:Reference

    <Label Target= '{x:Reference secondNameBox}'>_Second Target</Label>

    Или даже так:

    <Label Target= 'thirdNameBox' >_Third Target</Label>

    Binding to Dynamic Objects

    .NET 4 приходит вместе с dynamic, потому и в WPF добавили возможность биндить к свойствам dynamic объектов. Если мы установим такие свойства у объекта:

    dynamic dynamicObj = BindPanel.DataContext ;
    dynamicObj.A = "Simple Binding";
    dynamicObj.B = new DynamicObjectClass(); 
    dynamicObj.B.C = "Nested Prop Binding";
    dynamicObj.AddItem("item 0");
    dynamicObj[0] = "Indexer Binding";

    То мы запросто можем установить такой биндинг:

    <StackPanel Name="BindPanel" DataContext="{StaticResource MyDynamicObject}">
            <TextBox Text="{Binding Path=A}"/>
            <TextBlock Text="{Binding Path=B.C}" />
            <TextBox  Text="{Binding Path=[(x:Int32)0]}"/>
    </StackPanel>

    Эта возможность тоже даст пищу для размышлений. Теперь можно придумать о быстрой реализации биндинга к DataSet или XMLDocument.

    Node Loop flexibility

    Как известно в .NET 4 появилась отдельная библиотека System.Xaml, позволяющая нам обрабатывать Xaml разметку, считывать и превращать в граф объектов. Раньше у нас была возможность так же работать с Xaml разметкой при помощи XamlReader и XamlWriter, но все что они нам давали – это считывать и записывать Xaml, но не предоставляли нам возможность работать с ним. Теперь же набор классов для работы с Xaml пополнился, например, XamlXmlReader, который позволяет пробегаться еще и по элементам xaml дерева. Пример можно посмотреть здесь http://blogs.msdn.com/b/llobo/archive/2009/11/09/ xaml-2009-features-node-loop-flexibility.aspx, в данном примере у считываемого Xaml файла заменяют родительский элемент Window на Page.

    Key\Gesture Binding

    Появилась возможность биндить Key и Modifiers в KeyBinding. Теперь можно создать свою DelegateCommand со свойствами

    public Key GestureKey { get; set; }
    public ModifierKeys Gesturemodifier { get; set; }
    public MouseAction MouseGesture { get; set; }

    Инициализировать команду следующим образом

    public ICommand ExitCommand
    {
        get
        {
            if (exitCommand == null)
            {
                exitCommand = new DelegateCommand(Exit);
                exitCommand.GestureKey = Key.X;
                exitCommand.Gesturemodifier = ModifierKeys.Control;
                exitCommand.MouseGesture = MouseAction.LeftDoubleClick;
            }
            return exitCommand;    
        }
    }

    А дальше забиндить клавиши:

    <Window.InputBindings>
        <KeyBinding Command="{Binding ExitCommand}" 
                    Key="{Binding ExitCommand.GestureKey}"
                    Modifiers="{Binding ExitCommand.Gesturemodifier}"/>
    </Window.InputBindings>

    Без необходимости объявления ресурсов.

    Ключевые термины

    GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры.

    IDE (англ. Integrated Development Environment) — система программных средств, используемая программистами для разработки программного обеспечения.

    IntelliSense — технология автодополнения Microsoft, наиболее известная в Microsoft Visual Studio. Дописывает название функции при вводе начальных букв. Кроме прямого назначения IntelliSense используется для доступа к документации и для устранения неоднозначности в именах переменных, функций и методов, используя рефлексию.

    Windows Communication Foundation (WCF) — программный фреймворк, используемый для обмена данными между приложениями входящими в состав .NET Framework. До своего выпуска в декабре 2006 года в составе .NET Framework 3.0, WCF был известен под кодовым именем Indigo.

    Windows Workflow Foundation (WF) представляет собой технологию компании Microsoft для определения, выполнения и управления рабочими процессами (англ. workflow). Данная технология входит в состав .NET Framework 3.0, который изначально установлен в Windows Vista и может быть установлен в Windows 2003 Server и Windows XP SP2. WF ориентирована на визуальное программирование и использует декларативную модель программирования.

    Шейдер (англ. Shader) — это программа для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.

    Краткие итоги

    Как видно из вышеизложенного, появилось масса нововведений в WPF 4.0. Можно сказать, что WPF — это одно из ведущих направлений Windows-приложений. Со временем WPF превратится в систему, подобную User32 и GDI/GDI+, к которой будут добавляться новые расширения и высокоуровневые средства. В конечном итоге WPF позволит проектировать приложения, которые было бы невозможно (или, по крайней мере, непрактично) построить средствами Windows Forms.

    Набор для практики

    Вопросы:

  • Назовите основные нововведения Visual Studio 2010 касающиеся разработки WPF/Silverlight приложений.
  • Перечислите новые средства WPF 4.
  • Назначение клиентского профиля.
  • Назовите новые и доработанные графикические возможности WPF 4
  • Ключевые улучшения WPF 4 для XAML
  • Вернуться к учебному плану