.NET → Attached свойства для ограничения текстового ввода
WPF – это уже далеко не новая технология на рынке, но относительно новая для меня. И, как это часто бывает при изучении чего-то нового, появляется желание/необходимость в изобретении велосипедов с квадратными колесами и литыми дисками для решения некоторых типовых задач.
Одной из таких задач является ограничение ввода пользователем определенных данных. Например, мы хотим, чтобы в некоторое текстовое поле можно было вводить только целочисленные значения, а в другое – дату в определенном формате, а в третье – только числа с плавающей запятой. Конечно, окончательная валидация подобных значений все равно будет происходить во вью-моделях, но подобные ограничения на ввод делают пользовательский интерфейс более дружественным.
В Windows Forms эта задача решалась довольно легко, а когда в распоряжении был тот же TextBox от DevExpress со встроенной возможностью ограничения ввода с помощью регулярных выражений, то все было вообще просто. Примеров решения этой же задачи в WPF довольно много, большинство из которых сводится к одному из двух вариантов: использование наследника класса TextBox или добавление attached property с нужными ограничениями.
Одной из таких задач является ограничение ввода пользователем определенных данных. Например, мы хотим, чтобы в некоторое текстовое поле можно было вводить только целочисленные значения, а в другое – дату в определенном формате, а в третье – только числа с плавающей запятой. Конечно, окончательная валидация подобных значений все равно будет происходить во вью-моделях, но подобные ограничения на ввод делают пользовательский интерфейс более дружественным.
В Windows Forms эта задача решалась довольно легко, а когда в распоряжении был тот же TextBox от DevExpress со встроенной возможностью ограничения ввода с помощью регулярных выражений, то все было вообще просто. Примеров решения этой же задачи в WPF довольно много, большинство из которых сводится к одному из двух вариантов: использование наследника класса TextBox или добавление attached property с нужными ограничениями.
.NET → Вышла Elysium Theme 1.2 (Community Technology Preview 2)
Некоторое время назад я писал о том, что хочу сделать небольшой open-source проект Elysium. О проекте в целом вы можете прочитать в приведённой статье, сейчас же стоит упомянуть только то, что одна из частей проекта — тема в стиле Metro для WPF. Дело в том, что вчера я выпустил версию 1.2 (CTP 2) этой темы и сегодня хочу поведать о том, что в ней такого особенного реализовано.
.NET → Иконки: растр vs вектор из песочницы
В каждом приложении есть иконки для кнопок, статусов, тулбаров, меню и многого другого. Конечно, в идеале, в команде должен быть выделенный человек, специализирующийся на иконках и знающий все ньюансы создания оных.
Но жизнь далека от идеала, и таких людей в командах обычно нет (честно говоря хороших «иконщиков» в принципе найти очень сложно).
Поэтому хотелось бы поделиться с общественностью опытом работы с иконками в WPF приложениях и, может быть, почерпнуть для себя что-нибуть новое из комментариев.
Но жизнь далека от идеала, и таких людей в командах обычно нет (честно говоря хороших «иконщиков» в принципе найти очень сложно).
Поэтому хотелось бы поделиться с общественностью опытом работы с иконками в WPF приложениях и, может быть, почерпнуть для себя что-нибуть новое из комментариев.
Я пиарюсь → Музыкальный плеер Meridian. Прогресс за месяц
Приветствую вас, дамы и господа!
Весь месяц музыкальный плеер ВКонтакте «Meridian» рос и активно развивался. Были достигнуту хорошие результаты, которыми мы и хотим сейчас с вами поделиться.

Весь месяц музыкальный плеер ВКонтакте «Meridian» рос и активно развивался. Были достигнуту хорошие результаты, которыми мы и хотим сейчас с вами поделиться.

.NET → WPF layout: Measure и Arrange

Общее представление о том, что такое WPF Layout System, можно получить из msdn (1, 2). Там написано, что элементы управления образуют Visual-дерево, что каждый из элементов управления имеет свой определенный прямоугольник, в рамках которого он отрисовывается, что определение этих прямоугольников возлагается на Layout System и выполняется в 2 этапа (measure и arrange) и что WPF — это retained mode graphic system, в отличие от обычных Immediate и в чем преимущества такого подхода.
Однако при чтении msdn возникает ряд вопросов, на которые в документации ответов нет, и можно только догадываться о том, что происходит. Например — что произойдет, если какой-либо дочерний контрол в measure-стадии запросит для себя размер, превышающий переданный ему availableSize? Или — как при необходимости реализовать методы MeasureOverride и ArrangeOverride правильно, чтобы написанный код не противоречил принятым соглашениям о том, как должны выполняться этапы Measure и Arrange ? Влияет ли результат, полученный на этапе Measure, на этап Arrange и отрисовку, или же на отрисовку влияет только вызов Arrange, а Measure — чисто информационный этап?
Попробуем разобраться более детально в том, что происходит за кулисами.
Блог компании DevExpress → Новогодний подарок от DevExpress
Близится Новый Год и, похоже, у всех уже предпраздничное или праздничное настроение в ожидании предстоящего веселья и получения подарков :-)
Для тех программистов, кто использует платформу .NET, DevExpress совместно с Microsoft тоже приготовили небольшой подарок – бесплатный Map Control для работы с картами в WPF приложениях.
Вот небольшой ролик, демонстрирующий этот контрол в действии:
Для тех программистов, кто использует платформу .NET, DevExpress совместно с Microsoft тоже приготовили небольшой подарок – бесплатный Map Control для работы с картами в WPF приложениях.
Вот небольшой ролик, демонстрирующий этот контрол в действии:
.NET → Регистрация глобальных «хоткеев» при использовании WPF из песочницы
Возможно, вы когда-то очень хотели чтобы в вашем приложении присутствовала возможность управления чем-либо через глобальные клавиши. И, возможно, вам нравится программировать с использованием технологии WPF. Тогда этот топик для вас.
.NET → Удобная навигация в Windows Explorer и Total Commander
Вы никогда не задумывались над тем, что навигация в Windows могла бы быть намного удобней? Почему бы не добавить возможность, аналогичную навигации по классам во многих современных IDE, когда в выпадающем списке, вызываемом сочетанием клавиш, отображаются папки с нужным именем, вот так:


.NET → В преддверии Windows 8 из песочницы
Поговорка гласит: «О вкусах не спорят».
Сегодня вечером (статья написана 13 сентября) Microsoft представит новую версию Windows — Windows 8. И одним из самых многообещающих новшеств будет так называемый Start screen. Однако я нахожусь в числе тех людей, которым он не нравится. Нет, мне не нравится не сама идея, мне не нравится её реализация. А что делает программист когда его не устраивает какое-то решение? Правильно, изобретает велосипед. Сегодня я представлю вам свой.
Сегодня вечером (статья написана 13 сентября) Microsoft представит новую версию Windows — Windows 8. И одним из самых многообещающих новшеств будет так называемый Start screen. Однако я нахожусь в числе тех людей, которым он не нравится. Нет, мне не нравится не сама идея, мне не нравится её реализация. А что делает программист когда его не устраивает какое-то решение? Правильно, изобретает велосипед. Сегодня я представлю вам свой.
.NET → Относительно позиционированные элементы в документах WPF
Пару месяцев назад мне пришлось реализовывать интерфейс с помощью WPF. В основном использовался FlowDocument, т.к. необходимо было максимально близко организовать UI в стиле веб-страниц.
Привыкший к свободе по позиционированию HTML-элементов с помощью CSS, я не мог найти решение по относительному позиционированию вложенных элементов. Свойства Top, Left, Right, Bottom полностью отсутствуют в плавающих WPF документах. MSDN выдал только класс Figure. Однако HorizontalOffset и VerticalOffset не работают при использовании FlowDocumentScrollViewer. Поиск в гугле также не помог.
Однако решение оказалось более чем простым.
Привыкший к свободе по позиционированию HTML-элементов с помощью CSS, я не мог найти решение по относительному позиционированию вложенных элементов. Свойства Top, Left, Right, Bottom полностью отсутствуют в плавающих WPF документах. MSDN выдал только класс Figure. Однако HorizontalOffset и VerticalOffset не работают при использовании FlowDocumentScrollViewer. Поиск в гугле также не помог.
Однако решение оказалось более чем простым.