Сообщения

Сообщения за декабрь, 2009

Silverlight 3: UpdateSourceTrigger PropertyChanged – реализация отсутствующего функционала

В Silverlight 3 для UpdateSourceTrigger есть только занчения Default и Explicit. Часто необходимо получить WPF поведение – UpdateSourceTrigger . PropertyChanged Как это решается: В лоб: Вешаем на TextBox обраотчик TextChanged в котором передергиваем фокус на элементе. Стандартная фишка и работает без потери позиции курсора в Silverlight. private void MyTextBox_TextChanged(object sender, TextChangedEventArgs e) {     // чтоб работало вточности как при WPF UpdateSourceTrigger.PropertyChanged реагируем только если элемент под фокусом     // Т.е. этим запретим установку фокуса при отркрытии     if ( FocusManager.GetFocusedElement() != sender )     {         return;     }     // здесь ставьте фокус на какой-то невидимый элемент или на RootVisual     UiUtilsCommon. TrySetFocusOnRootVisual ();     var tb = sender as TextBox;     // возвращаем фокус     tb.Focus(); } Как это решается по уму: Создавайте в коде свой контрол, который наследует TextBox и подкллючите приведенный выше обработчик в к

AutoCompleteBox has problem with items with same name

Русский заглоловок: Проблема выбора в AutoCompleteBox объектов с одинаковым свойством. Поблема: при отображении в AutoCompleteBox объектов, которые имеют одинаковые поля, AutoCompleteBox всегда будет выбирать только первый найденный (всегда один и тот же) объект из всех объектов с одинанковым полем. И это не смотря на то, что в выпадающем списке (выпадающей области) мы может отобразить любые нужные поля объекта сразу или даже DataGrid и увидеть отличия объектов. Вот сразу простое и быстрое решение: private void someInit() {     completeBox.SelectionChanged += AbonentsAutoCompleteBox_SelectionChanged;     completeBox.Populated += new PopulatedEventHandler(completeBox_Populated); } void completeBox_Populated(object sender, PopulatedEventArgs e) {     var completeBox = sender as AutoCompleteBox;     completeBox.Tag = null; } private void AbonentsAutoCompleteBox_SelectionChanged(object sender, SelectionChangedEventArgs e) {     fukcAutoAutoCompleteBoxDevelopersStupidPrinciplesInSel

Silverlight: Drag & Drop или “Тупой и еще Тупее” из Silverlight Toolkit October 2009.

Ой извинииите, конечно я хотел сказать “Медленный и еще Медлееннее”. Похоже разарботчик Drag & Drop из Silverlight Toolkit October 2009 настолько увлекся следованию стандартной схеме Drag & Drop в Windows (это хорошо), что совсем забыл про конечного пользователя. Или может он думал, в этот момент, о скоростном удобном индийском поезде :). Поскольку я написал свой Дарг эн Дроп, то я знаю о чем говорю. Очень медленно, неоправданно медленно. Даже на почти пустом элементе этот Drag & Drop появлятеся около секунды. При этом он часто наровить появиться не там, где мышь – это просто трагедия какая-то. На то, что он, при старте, показывает несуразное View можно закрыт глаза. Рецепт: Используйте таки Drag & Drop из Silverlight Toolkit и ждите следующей версии. Если ваши ресурсы позволяют, сделайт свой Drag Drop. Будет летать как молния, невзирая на количество элементов в Source и Target. К тому же легко под себя настроить любое Drag View (видим то, что перетаскиваем). Мне это по

Silverlight: Сколько строк за раз отоброзит Silverlight и не повиснет или Максимальное количество элементов в списочном элемнте управления, которое не приводит к подвисанию View

Такое получилось правило: Все что при появлении отображает от ста элементов списке должно работать с пейджером. Ну триста строк максимум. Нет, я делал и 3 000 и десять тысяч элеметов. Мне то нормально, но вот менеджеры проектов и заказчики очень расстраивались увиденным :) Вы скажите “Есть виртуализация”. Да, до какой-то степени есть виртуализация :). Главное запомните, что, наприммер в трехзвенке, самомы медленным (слабым) звеном окажется UI. Это не только Silverlight свойственно. Нужно учитывать какой элемент рисуется. DataGrid с большим количеством колонок будет самым медленным обычно. А вот TreeView у которого в иерархии миллион элементов, но при открытии отображается только 300 элементов первых уровней, будет летать. Не гарантирую конечно :) Отдельная песня про Drag & Drop из Silverlight Toolkit. Этот вообще тяжело переносит большие списки. Резюме: пейджер всегда поможет.

Silverlight: Динамическое изменени цвета шрифта вместе с фоном в перекрестных состояниях – только два подхода

Ребята, не читайте, пожалуйтста, дальше, если вы не втеме. Будет надо, Гугл вас сам сюда приведет. Поехали: То что в CSS и HTML стоит 2 копейки может превратиться в Silverlight в головную боль. Задача: при наведении мыши изменить бэграунд и цвет шрифта. Обычное состояние: Светлый фон и темный шрифт Состояние при наведенной мыши или выделенного элемента: меняем на темный фон и светлый шрифт. Теперь загвоздка – при уходе мыши, если элемент выбран, нужно сохранить состояние выделенности (Темный фон, свелый шрифт). Конечно в HTML через CSS мы это сделаем без анимации, но просто и быстро. Мы меняем или добавляем втророй класс CSS, например, и все фиксируется и при уводе мыши состояние выделенности не меняется. Ну еще много вариантов, но не в этом соль. Сильверлайт это всетаки не WPF, поэтму возникают сложности, т.к. в Silverllight это работает на визуальрных состояниях и переходах (транзишен нах - вроде называется). Поскольку состояния наведения и увода мыши, а также выделения элемента нах

Silverlight: не используйте темы из Toolkit. Никогда.

Сначала тезисы, потом раскрою. Темы из Silverlight Toolkit это ваш враг. Они подойдут для обучения, подойдут как куски стилей, цветов, кистей, но не вздумайте их применять целиком. Вы можете встретить фразу “Professional themes for your applications” - это ложь. Общее заключение по готовым темам Silverligt: Пустой рекламный ход Недоделка Халтура Тяп ляп и самое главное ПОДСТАВА чистой воды вас и коллег и воровство вашего времени Почему: Непреемлемые вещи, которые сделаны в этих темах не афишируются. Никто не носиться по интеренету и не кричит (кроме Гугла конечно) чего в них не так и чего они вас лишают. Выкинут функционал валидации. Просто выкинули куски шаблонов в стиле вообще всех элементов :) Выкинут функционал группирования в DataGrid. Тоже самое. Да да, вы настроили группы в DataGrid, а они не появятся. Неизвестно чего еще не будет работать и чего выкинули Я не дизайнер, но темы просто кричат своей непродуманностью и топорностью в некоторых мо