Denis Gladkikh
Russian   |  English

Выбранный тег: XAML

Страница  1  2  3  

Windows Phone 7 Silverlight: Behaviors для TextBox

Термины Behaviors и Interactions ввели две библиотеки, поставляемые вместе с продуктом Expression Blend. Эти библиотеки еще известны со времен Silverlight и WPF, и предполагаю, что большинство разработчиков про них знает. Найти эти библиотеки можно в директории “c:\Program Files (x86)\Microsoft SDKs\Expression\Blend\” (если Windows 32 битный, то без (x86)), если Expression Blend был установлен. В этой папке вы сможете найти  библиотеки для WPF/Silverlight/WindowsPhone. Зачем они нужны и как их правильно использовать вы можете узнать, пройдя по ссылки на MSDN Expression Blend SDK for Windows Phone. Если кратко: это способ расширят функциональность контролов, да еще и так, чтобы поддерживался паттерн MVVM (байндинги и т.п.). 

При разработке своего первого приложения мне потребовалось несколько Behaviors для TextBox, которыми я и хочу с вами поделиться.



Улучшаем Silverlight приложения: стандартное контекстное меню для TextBox

Как часто у меня бывает такое, что в одной руке у меня кружка чая или пряник, а другой рукой я печатаю и вожу мышкой. И вот не могу я одной рукой сразу же нажать Ctrl+C или Ctrl+V (могу конечно, но не удобно, не привычно). Во всех программах, на всех сайтах, у меня есть возможность выделить мышкой текст и скопировать его, а дальше вставить в другое место, а вот TextBox по умолчанию в Silverlight не предоставляет мне такой возможности, и это очень плохо. В особенности для бизнес-приложений. Люди привыкают к стандартным функциям, нельзя их лишать этого. Я говорю об этом меню:

sample

В Silverlight 4 появилась возможность обрабатывать нажатие правой кнопки мыши, и так же с ним появился контрол ContextMenu (в Silverlight Toolkit). Следовательно, мы теперь можем обогатить наш интерфейс.

Первое, с чего можно начать, это погуглить и найти что-то вроде такой статьи Silverlight 4 textbox right click context menu with cut, copy and paste behavior, которая приведет нас к более доработанному варианту TextBoxCutCopyPasteBehavior. Его, как показала практика, мне тоже пришлось немного доработать.



Эти непростые XAML Namescopes

На прошлой неделе я, просто ради интереса, подготовил 4 примера в Еще одно сравнение паттернов MVVM и MVP для Silverlight. Примеры возникли не случайно, просто, попался на эту проблему пару недель назад. Там же был опросник о том, какие из примеров рабочие. Определить просил просто, посмотрев на код. Было получено 56 (вместе с моим) ответов, и только два из них были верными (вместе с моим). В этих примерах я уточнил, что опрос касается Silverlight, так как в WPF все немного по-другому.



Впечатления о втором дне MIX’11: Silverlight 5 Beta

Буквально несколько часов назад нам анонсировали Silverlight 5 на конференции MIX’11. Даже можно скачать Silverlight 5 Beta and Tools и попробовать в живую. Я тоже это сделал, ради любопытства.  Поставил на виртуальную машину, попробовал несколько новых фич. Вам, кстати, тоже не рекомендую ставить на рабочую машину, если вы Silverlight разработчик, и сейчас разрабатываете на Silverlight 4. У меня постоянные зависания, повторяется всегда с ChildWindow. Но это все может быть из-за того, что стоит все на виртуальной машине, да еще и на Windows Server 2008 R2 (та виртуалка, на которой мы разрабатывали проект на HackDay). Но я вас предупредил.

Ознакомиться с новыми фичами Silverlight 5 можно (и нужно!) в нескольких местах, например, в блоге Tim Heuer – Silverlight 5 Beta – A guide to the new features. Еще кто-то кинул в твиттере ссылку на pdf документ, на сайте Silverlight.net Silverlight 5 Beta Technical Features (как на него попасть – не знаю).



Silverlight: Байндинг коллекции элементов на TabControl.ItemsSource

Раньше я как-то обходился без подобного в Silverlight. Всегда размещал TabItem в XAML коде, а не байндил коллекцию объектов, и при помощи DataTemplate настраивал вид того, что находится в TabItem.Content. Просто не было необходимости байндить коллекцию моих объектов (неких BindingModel) на TabControl.ItemsSource, а тут, буквально недавно, захотелось немного отрефакторить код, так как коллекция табов все росла, и управлять ею уже было сложно, и как раз придумал как это возможно сделать через описанный выше способ. Сказано – сделано. Потратил пару часов, переписал код, запускаю, и обнаруживаю такой вот exception:

System.ArgumentException: Unable to cast object of type 'SilverlightTabControl.Foo' to type 'System.Windows.Controls.TabItem'.

Быстро гуглю, нахожу на форумах Silverlight тему Databinding a TabControl (Я не одинок! Как показало более глубокое угугление, я совсем не одинок), а там

This is because currently TabControl doesn't override PrepareContainerForItemOverride, so it won't automatically wrap your data source in TabItems.

Ну и в качестве решения предлагается написать свой TabConverter. Microsoft, ну я точно помню, что в WPF байндинг на ItemsSource у TabControl’а работает прекрасно. Я это делал. Ладно, терпим, что в Silverlight контролах достаточно много багов, но тут-то просто ребята немного не доделали, а контрол зарелизили, да и сколько версий он уже живет? В реальности на первый взгляд нужно сделать 2 вещи:



Используем Silverlight DataPager без WCF RIA

Может я как-то не правильно подошел к DataPager, но, как оказалось, заставить его нормально работать без DomainDataService не так уж и просто. Идея у меня была простая, думал найти свойство, вроде ItemCount (оно есть, но только для чтения), туда поставить то количество элементов, которое у меня есть, сделать байдинги на PageSize и PageIndex и все должно быть готово. Но пришлось делать все совершенно по-другому.

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



Как часто вы думаете о том, что пользователь может нажать Double-Click, где это не предусмотрено?

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



Никогда не делайте классы и пространства имен с одним и тем же именем

Был у нас team leader (дальше просто лид). Тогда нас всех еще набирали на работу в компанию, где я сейчас работаю. Тогда намечалось создание нового продукта. Тогда нас брали, чтобы мы реализовали этот продукт. Перед тем как нас брали лид сделал правильную вещь, он остановился на модульной архитектуре, выбрал Prism, создал несколько модулей на клиенте, а на сервере под них сервисы. Раздал каждому разработчику по модулю (они практически были все независимы) и ждал результата. Очень все было верно, разработчики знали друг друга плохо, мы писали потихоньку код и знакомились.



Silverlight. Основы. Валидация. Часть 2. IDataErrorInfo & INotifyDataErrorInfo

Буквально вчера написал первую часть статьи про валидацию введённых данных в Silverlight, сегодня хочу продолжить эту тему, чтобы не откладывать в дальний ящик. В этой части я попробую дополнить первую часть, скажу еще, что не сказал про DataAnnotations, а так же опишу интерфейсы IDataErrorInfo и INotifyDataErrorInfo. Рекомендую прочесть первую часть статьи перед прочтением этой, потому как я буду использовать все тот же пример.



Silverlight. Основы. Валидация. Часть 1. DataAnnotations & ValidatesOnExceptions

В Silverlight 4 есть несколько способов для валидации введённых данных, точнее несколько подходов для реализации валидации. Первый вариант, реализация валидации на DataAnnotation. Вариант, когда правила валидации описываются при помощи атрибутов. Два других подхода – это реализация одного из интерфейсов IDataErrorInfo или INotifyDataErrorInfo. Я хотел бы остановиться на каждом из подходов, поговорить о преимуществах и недостатках каждого из них. Цель данной статьи выявить лучшие практики для валидации для себя и для вас. Так получилось, что статья оказалась большой, потому реализую ее в два или три подхода. Эта часть только про DataAnnotation.



Страница  1  2  3