воскресенье, 18 декабря 2011 г.

Упрощаем обработку исключений

Я начинаю серию постов, посвященных разнообразным методам-расширениям, которые немного упрощают жизнь простого разработчика, выполняя рутинную работу. Сегодня я хочу рассказать о расширениях для класса Exception.

пятница, 9 декабря 2011 г.

Использование конвертеров значений в привязках данных WPF

Связывание данных (Data Binding) в WPF – очень мощный (правда, не всегда удобный) механизм. А возможность использование конвертеров дает возможность связывать интерфейс с данными почти любого вида. Несмотря на кажущуюся простоту явления, возможности, открываемые конвертерами, поистине безграничны.

среда, 7 декабря 2011 г.

Дополнительные материалы по использованию слабых ссылок

C#
В декабрьском номере журнала MS Developer вышла статья про использование слабых ссылок для уведомлений об изменений. Для тех кому интересен этот материал предлагаю ознакомиться с исходными кодами классов коллекций, которые упоминаются в статье.

воскресенье, 4 декабря 2011 г.

"Магия" Linq

imageЯ неоднократно наблюдал, что начинающие разработчики относятся к Linq (да и вообще к многим фреймворкам), как к некоторой магии. Они используют “заклинания”, получают требуемый результат – и все. При этом многие даже не пытаются понять, что же происходит за кулисами изящных синтаксических конструкций, считая это безумно сложным, низкоуровневым и недоступным простым смертным.

четверг, 24 ноября 2011 г.

Анимация времени

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

суббота, 19 ноября 2011 г.

Централизованное управление командами в WPF

Когда я был начинающим программистом, то программировал с использованием библиотеки MFC. Мне очень нравилась предлагаемая MFC модель использования команд. Команда – это некоторый идентификатор. С идентификатором команды просто и естественно связываются строка подсказки, метод обработки доступности команды, метод для выполнения действия команды и т.п. Команды объявляются централизовано, обработчики команд не зависят от того, как была вызвана команда – программно, нажатием на кнопку в панели инструментов или через контекстное меню. Все было понятно и логично.

понедельник, 7 ноября 2011 г.

MessageBox + FlowDocument

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

среда, 2 ноября 2011 г.

Завершаем создание инсталляционного комплекта

После того как все файлы инсталлятора упакованы в один файл и UAC не задает лишних вопросов при установке, добавим последний завершающих штрих – на последней странице программы установки добавим галочку “Запустить программу”.К сожалению, стандартные средства Setup Project не позволяют это сделать.

пятница, 21 октября 2011 г.

Обновление манифеста приложения с командной строки

Одна из проблем использования самоустанавливающегося архива, создаваемого программой IExpress, под Windows Vista или Windows 7 с включенным UAC – это обилие вопросов о безопасности, которые задаются пользователю в процессе установки. Эти вопросы возникают из за того, что в манифесте получаемого исполняемого файла указан требуемый уровень доступа как asInvoker, в то время как запускаемые в виде дочерних процессов программы установки требуют более высокого уровня доступа. Проблему можно решить, изменив манифест созданного IExpress приложения, указав более высокие требования.

среда, 19 октября 2011 г.

Продолжаем создание инсталляционного комплекта

В прошлом посте я начал тему создания инсталляционного комплекта. Один из вопросов, который остался нераскрытым:

Ожидание завершения всех процессов, запущенных из программы установки.

Это должна быть простая программа, которая не требует установки дополнительных компонентов, поэтому язык C# не подходит (на компьютере может отсутствовать .NET Framework). Я выбрал для её реализации С++ с использованием статической библиотеки STL.

понедельник, 10 октября 2011 г.

Создание средствами Microsoft установочного комплекта для публикации в Web

MS Visual Studio поддерживает специальный тип проекта для создания программы установки (Setup Project), позволяющий довольно гибко описать правила установки вашего приложения на компьютере пользователя. Получаемая в результате сборки такого проекта программа установки выполняет копирование файлов, добавляет нужные запись в реестр, создает ярлыки для запуска и, что особенно важно, устанавливает необходимые для приложения компоненты (Prerequisites). Установочный комплект, полученный в результате сборки состоит из пакета установщика Windows (файл с расширением MSI), исполняемый файл setup.exe (выполняет установку необходимых компонентов), установочные комплекты необходимых для установки приложений. Однако такой комплект невозможно опубликовать на Web-сайте, поскольку он состоит из нескольких файлов! Для решения это проблемы можно поступить одним из следующих способов:
  1. Использовать для сборки другое средство создания установочного комплекта.
  2. Заархивировать все файлы комплекта (например, с помощью ZIP) и опубликовать на сайте полученный архив.
  3. Превратить полученный установочный комплект в самораспаковывающийся архив, автоматически запускающий установку программы.

среда, 5 октября 2011 г.

Конвертер для получения пути к файлу из пути к папке и имени

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

пятница, 30 сентября 2011 г.

Как в WPF приложении отобразить иконку файла

Некоторое время назад передо мной возникла задача отобразить в приложении иконку файла. Быстро было найдено решение – использовать функцию CreateBitmapSourceFromHIcon. Однако в рамках паттерна MVVM непосредственное использование функции было неудобно. Простенький конвертер, преобразующий путь к файлу в его иконку, делает удобным размещение иконки файла непосредственно в XAML.

среда, 21 сентября 2011 г.

Использование перечислений в локализуемых WPF приложениях

Использование перечислений (enum) в WPF очень удобно. Например, можно продекларировать в XAML указать, что поля перечисления надо использовать для наполнения ComboBox, и в выпадающем списке появятся текстовые представления полей перечисления.

пятница, 16 сентября 2011 г.

Связывание данных - выводим числа

Продолжаю тему про конвертеры в WPF.

В программе для анализа проектных данных, над которой я работаю в последнее время, требуется выводить много числовых данных, сопровождаемых существительными. Например 5 дней, 48 часов, 10 проектов, 4 сотрудника. Обратите внимание, что падеж существительного изменяется в зависимости от числа которое перед ним. Так, фраза “Осталось 41 дней” выглядит некрасиво и, естественно, немного раздражает. Вставлять отдельную логику вывода в каждом из многочисленных текстовых полей, в которых требуется выводить подобные данные, мне не хотелось, а хотелось сделать некоторое обобщенное решение задачи вывода в пользовательском интерфейсе числовых данных с существительными в правильном падеже.

вторник, 13 сентября 2011 г.

Связывание данных – форматируем строки

Одна из наиболее востребованных задач при связывании данных (Binding) – это вывод с использованием форматирования. К сожалению, стандартные средства связывания данных не предлагают средств для этого. Однако простенький конвертер помогает решить эту проблему.

понедельник, 12 сентября 2011 г.

Упрощаем множественные привязки к данным (MultiBinding)

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

вторник, 14 июня 2011 г.

Локализация строк в WPF приложениях

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

четверг, 9 июня 2011 г.

Технология локализации WPF приложений

При использовании материала
ссылка на источник обязательна.
Интернет пестрит разнообразными методами локализации WPF приложений. Я даже не буду приводить здесь ссылки, любой заинтересованный в этом вопросе найдет их за несколько секунд. В этой статье я хочу рассказать о технологии локализации, которая практически применялась при разработке в моем последнем проекте (программа ProjectsProfiler), и, как мне кажется, может оказаться полезной другим разработчикам. В отличие от любого метода, который лишь обозначает способ, которым теоретически можно создавать приложение, говорящего на разных языках, технология описывает производственный процесс создания такого приложения и дает ответ на многие вопросы типа "А как сделать...".

среда, 8 июня 2011 г.

Первое сообщение

Здравствуйте!

И вот, наконец, случилось. Результат нашей более чем годовой работы - инструмент руководителя проектного офиса ProjectsProfiler - стал доступен  для скачивания на http://projectsprofiler.ru.
В ходе работы над программой мы столкнулись с множеством трудностей, как организационного, так и технического характера. Я уверен, что эти проблемы не уникальны, и в этом блоге я хочу поделиться найденными способами их решения.

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

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