Windows Ribbon в .NET-приложениях (ч.6)
После длительного перерыва мы продолжаем работать с лентой Windows в WinForms-приложениях. Как обычно, напомню, что в предыдущей статье мы рассмотрели несколько типов коллекций (или галерей) Windows Ribbon.
За это время Арик Познански успел выпустить версию 2.6 библиотеки
Начнём со списка произведённых изменений.
Так что же нового?
- Упрощённое использование элемента управления Ribbon.
Просто перетащите контрол ленты на форму — и можете работать. Никакой реализации IRibbonForm, никакой обработки изменения размеров, никаких вызовов InitFramework и DestroyFramework (прим. переводчика: см. первую статью). - Добавлена поддержка локализации
- Решение обновлено для использования с .NET 4 и Visual Studio 2010
- Добавлен инструмент RibbonGenerator
- Добавлена возможность указывать "быстрые клавиши" в формате XML
- А также исправлено несколько ошибок (в частности, ошибка с галереями — прим. переводчика: см. предыдущую статью).
Что насчёт примеров?
Все 18 примеров были обновлены для использования новой инфраструктуры.
Кроме того, появился новый пример, "19-Localization", который показывает, как использовать новую возможность локализации элемента управления ленты.
Более подробно о поддержке локализации и инструменте RibbonGenerator можно прочитать в
Прим. переводчика: локализация будет рассмотрена в одной из последующих статей цикла, а об инструменте RibbonGenerator будет рассказано чуть ниже.
Нужно знать что-нибудь ещё?
Просто убедитесь, что вы скомпилировали и установили RibbonGenerator. Проект установщика входит в пакет поставки библиотеки. Это средство необходимо для создания DLL-библиотек ленты.
Благодарность
Я бы хотел поблагодарить
Ribbon for WinForms: краткое руководство
В связи с большим количеством запросов инструкции по работе с новой версией проекта
Бернхард согласился и написал отличное руководство, которое я вам сейчас представлю. Заметьте, что первые 2 шага должны быть выполнены только в первый раз перед созданием приложений с лентой. Остаётся только один шаг (3) из руководства. Проще и быть не может!
Прим. переводчика: шаги с загрузкой и установкой Windows 7 SDK и последней версии RibbonLib (на момент написания статьи это версия 2.6) мы пропустим, так как они слишком очевидны.
Шаг 1. Соберите установщик RibbonGenerator и установите его.
Откройте решение Visual Studio 2010 для RibbonGenerator (.\RibbonLib_v2.6\RibbonGenerator\RibbonGenerator.sln), установите конфигурацию сборки на "Release" и соберите проект "RibbonGenerator.Setup" дважды!
После второй сборки проект скомпилируется без ошибок! Это официальный баг Visual Studio 2010, и нам придётся с этим жить.
Теперь вы можете запустить собранный установщик, который вы найдёте здесь: .\RibbonLib_v2.6\RibbonGenerator\RibbonGenerator.Setup\Release\RibbonGenerator.Setup.msi
Шаг 2. Скомпилируйте Ribbon.dll
Чтобы получить скомпилированную версию Ribbon.dll, откройте соответствующее решение (.\RibbonLib_v2.6\Ribbon-cs.sln) и соберите его с помощью Visual Studio (прим. переводчика: достаточно собрать только проект Ribbon).
Шаг 3. Создайте новое приложение Windows Forms с контролом ленты
Добавьте Ribbon в панель элементов, щёлкнув на ней правой кнопкой мыши и выбрав пункт "Выбрать элементы…". Укажите файл .\RibbonLib_v2.6\Ribbon\bin\Release\Ribbon.dll.
Перетащите элемент управления Ribbon на форму.
Для основной части формы можно добавить элемент управления Panel и задать свойству "DockStyle" значение "Fill".
Добавьте в проект новый XML-файл и назовите его Ribbon.xml. Добавьте в него следующее содержимое:
<?xml version='1.0' encoding='utf-8'?>
<Application xmlns='http://schemas.microsoft.com/windows/2009/Ribbon'>
<Application.Commands>
</Application.Commands>
<Application.Views>
<Ribbon>
</Ribbon>
</Application.Views>
</Application>
Задайте свойству файла Ribbon.xml "Специальный инструмент" значение "RibbonGenerator", чтобы автоматически сгенерировать файл .ribbon.
Прим. переводчика: для удобства работы с файлом разметки — думаю, вы уже поняли, что это именно он — вы можете по-прежнему указать для него соответствующую схему (см. первую статью).
Теперь необходимо указать файл .ribbon в свойстве элемента управления Ribbon на форме. Имя должно быть полным, включая пространство имён проекта.
Вот и всё. Теперь ваше приложение поддерживает ленточный интерфейс.
Ribbon for WinForms: подробнее об инструменте RibbonGenerator
Бернхард Эльбл опубликовал ещё два сообщения в своём блоге, подробнее описывающих последние улучшения в проекте
В первом сообщении Бернхард объясняет, что такое инструмент RibbonGenerator и как он генерирует .ribbon-файлы.
Во втором сообщении Бернхард рассказывает, что нужно для того, чтобы использовать проект Ribbon for WinForms в среде Visual Studio 2010 Express.
Что делает инструмент RibbonGenerator?
Он генерирует .ribbon-файлы, которые содержат определения команд и элементов управления и могут использоваться для отображения контрола ленты на форме Windows Forms.
Что из себя представляет RibbonGenerator?
Для генерирования .ribbon-файлов могут использоваться два приложения:
- Специальный инструмент, запускаемый прямо внутри среды Visual Studio, и
- Консольное приложение, запускаемое из командной строки
Оба приложения выполняют одинаковые функции.
Как RibbonGenerator генерирует .ribbon-файлы?
Поскольку нет подходящего API, инструмент "всего лишь" выполняет .bat-файл. Это настраиваемый .bat-файл, его содержимое создаётся инструментом. После первого обращения к инструменту файл "template.bat" создаётся в следующей папке: \Users\<username>\AppData\Local\RibbonGenerator.
Вы можете его изменить. Если вы его удалите, он будет заново создан при следующем обращении к инструменту RibbonGenerator.
Что делает этот .bat-файл?
Давайте взглянем на содержимое "template.bat".
"C:\Program Files\Microsoft SDKs\Windows\v7.0\bin\UICC.exe" "{XmlFilename}" "{BmlFilename}" /res:"{RcFilename}"
"C:\Program Files\Microsoft SDKs\Windows\v7.0\bin\rc.exe" /v "{RcFilename}"
cmd /c "("%VS100COMNTOOLS%..\..\VC\bin\vcvars32.bat") && ("%VS100COMNTOOLS%..\..\VC\bin\link.exe" /VERBOSE /NOENTRY /DLL /OUT:"{DllFilename}" "{ResFilename}")"
1. UICC.exe (включённый в состав Windows 7 SDK) генерирует файл определения ресурсов XAML-разметки ленты
2. rc.exe (также включённый в Windows 7 SDK) генерирует .res-файл — файл ресурсов Windows
3. link.exe (включённый в Visual Studio 2010 или Visual C++ 2010 Express) генерирует .dll-файл неуправляемой библиотеки. Это и есть .ribbon-файл, используемый контролом ленты!
Все переменные, заключённые в фигурные скобки, заменяются инструментом. Все создаваемые в процессе работы файлы удаляются после генерирования. Остаётся только .ribbon-файл {ResFilename}.
RibbonGenerator в экспресс-версиях Visual Studio 2010
Да, RibbonGenerator также работает и в экспресс-версиях Visual Studio 2010, но в версии 2.6 библиотеки вам понадобятся некоторые дополнительные приложения, чтобы инструмент заработал.
Требования:
- Windows 7 SDK
- Visual C++ 2010 Express
- Visual C# или Basic 2010 Express
Обратите внимание, что вам нужно установить Visual C++ 2010 Express, поскольку она содержит файл "link.exe", необходимый для генерирования .ribbon-файлов.
Ручная регистрация специального инструмента
Поскольку установщик RibbonGenerator не включён в поставку в скомпилированном виде и поскольку экспресс-версии не поддерживают проектов установок, необходимо зарегистрировать специальный инструмент вручную.
1. Откройте решение ".\RibbonLib_v2.6\RibbonGenerator\RibbonGenerator.sln", игнорируя все ошибки
2. Скомпилируйте его
3. Установите RibbonGenerator.dll в GAC (Global Assembly Cache — англ. глобальный кэш сборок), используя gacutil.exe из командной строки Visual Studio 2010 (запущенной от имени администратора):
gacutil -i RibbonGenerator.dll
4. Зарегистрируйте специальный инструмент в экспресс-версии Visual Studio 2010. Простейший способ — изменить существующий .reg-файл в папке с исходниками RibbonGenerator (.\RibbonGenerator\RegisterCustomTool_VS2010.reg). Если у вас 64-разрядная операционная система, выберите файл RegisterCustomTool_VS2010_x64.reg.
Давайте посмотрим внутрь второго файла:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\CLSID\{B64582D9-A489-42F4-BA55-BB6039D82916}]
@="RibbonGenerator"
"InprocServer32"="C:\\WINDOWS\\system32\\mscoree.dll"
"Class"="RibbonGenerator.CustomTool"
"Assembly"="RibbonGenerator, Version=1.0.1.0, Culture=neutral, PublicKeyToken=3cf107c5d7e68b1c"
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Generators\{164B10B9-B200-11D0-8C61-00A0C91E29D5}\RibbonGenerator]
@="Ribbon Generator"
"CLSID"="{B64582D9-A489-42F4-BA55-BB6039D82916}"
"GeneratesDesignTimeSource"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Generators\{E6FDF8B0-F3D1-11D4-8576-0002A516ECE8}\RibbonGenerator]
@="Ribbon Generator"
"CLSID"="{B64582D9-A489-42F4-BA55-BB6039D82916}"
"GeneratesDesignTimeSource"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Generators\{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}\RibbonGenerator]
@="Ribbon Generator"
"CLSID"="{B64582D9-A489-42F4-BA55-BB6039D82916}"
"GeneratesDesignTimeSource"=dword:00000001
Всё, что нам теперь нужно сделать, — это вставить правильные ключи для экспресс-версий.
Для Visual Studio 2010 (64-разрядная операционная система):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0
Для Visual C# 2010 Express (64-разрядная операционная система):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCSExpress\10.0
Для Visual Basic 2010 Express (64-разрядная операционная система):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VBExpress\10.0
Заключение
На этом пока всё. Как мы видим, изменения в библиотеке произошли действительно достаточно серьёзные, поэтому пришлось немного прервать знакомство с функциями ленты Windows в .NET-приложениях и написать такую "техническую" статью.
В следующей статье мы, наконец, рассмотрим обещанные четыре элемента управления ленты: флажок (CheckBox), выключатель (ToggleButton), а также специфические контролы ленты DropDownColorPicker и FontControl.
Январь 2011
Комментарии
Исходные сообщения в блоге Арика Познански, переведённые в этой статье:
Исходные сообщения в блоге Бернхарда Эльбла, переведённые в этой статье:
По теме
- Видео-курсы от MS: Разработка приложений виртуальной и расширенной реальности на платформе Microsoft
- ECMA JavaScript 6: Объекты
- Как просто создать приложение для iPhone
- Разработка приложений под Windows Phone 8
- Индексированное хранилище, часть 2
- Индексированное хранилище, часть 1
- Начала Metro-программирования: создание настраиваемых приложений (ч.2)
- Начала Metro-программирования: создание настраиваемых приложений (ч.1)
- Начала Metro-программирования: создание компонентов WinRT (ч.3)
- Начала Metro-программирования: создание компонентов WinRT (ч.2)