Спонсор: Microsoft
Опубликован: 13.12.2011 | Доступ: свободный | Студентов: 982 / 29 | Оценка: 4.29 / 4.57 | Длительность: 13:56:00
Лекция 4:

Silverlight и WPF в Visual Studio 2010

Новые средства 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)

Применение TaskbarItemInfo

Рис. 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

Эффект применения CaretBrush и SelectionBrush

Рис. 6.3. Эффект применения CaretBrush и SelectionBrush
ClearTypeHint

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

Эффект свойства RenderOptions.ClearTypeHint

Рис. 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

Игорь Ключников
Игорь Ключников
Россия
Михаил Ковязо
Михаил Ковязо
Россия, Москва, ВЗМИ, 1982