Сообщения

Показаны сообщения с ярлыком "Silverlight"

Cannot register duplicate Name 'XXX' in this scope

Изображение
Для решения проблемы замените в XAML атрибут x:Name на x:Key. Cannot register duplicate Name 'XXX' in this scope

Silverlight 4: Ошибки, которые должны свести вас с ума

Изображение
Очередные чудные ошибки Silverlight, которые отображаются вместо нормальных сообщений. Раз поисковик вас сюда привел, то общее решение вашей проблемы звучит так: Ищите случайно поставленную точку в заголовке и теле XAML в следующих местах, например: (Ошибки я выделил красным и жирным) В заголовке: xmlns:Some . OtherName="clr-namespace:BlaBla" xmlns:Some . ="clr-namespace:BlaBla" В теле элемента: <Some . OtherName:MyClass x:Key="MyClass"/> Подробное описание: Обратите внимание, что при этом Designe View в Visual Studio будет отображать страницу правильно, и не ругаться на ошибки. Далее каждый кейс и его ошибка. 1. Кейс xmlns:Some . OtherName="clr-namespace:SomeNamespace; assembly=SomeAssembly" Ошибка The property 'OtherName' does not exist on the type 'UserControl' in the XML namespace ''. 2. Кейс <Some . OtherName:MyClass x:Key="MyClass"/> Ошибка  Error Length cannot b...

WPF/Silverlight Tips: Коварное статическое свойствоDispatcher.CurrentDispatcher - не используйте.

Не используйте свойство Dispatcher.CurrentDispatcher!!! Или - используйте его по назначению, что фактически означает - "не используйте его никогда, чтоб не попасть в просак". Вместо него нужно использовать В WPF - Application .Current.Dispatcher . В Silverlight -  Deployment .Current.Dispatcher . Дело в том, что Dispatcher.CurrentDispatcher вернет диспатчер для текущего потока или создаст новый для потока, в котором нет еще диспатчера. Если вы работаете в потоке вашего UI, то все о.к., вы получите Dispatcher вашего UI-приложения. Но если вы работаете во внешнем потоке, то вы получите диспатчер, который никак не связан с вашими UI элементами и окнами и вы никогда не достучитесь до ваших гуев. Можно поймать неприятные баги, особенно при активном рефакторинге чужого кода. Универсальное решение для всех фреймворков SynchronizationContext .Current

Silverlight: The "ValidateXaml" task failed unexpectedly.

Ошибка возникает при компиляции солюшена с проектом Silverlight в Visual Stusio. Такая ошибка связана с тем, что в вашем GAC появилась сборка из Silverlight или из Silverlight Toolkit. Удаляйте эту сборку из GAC и все заработает. Гугл тоже согласен с таким решением. Обычно это сборки с версией 2.0.5.0. Имейте ввиду, что в GAC может быть совсем не та сборка, которая указана в ошибке. Может произойти так: В GAC уже лежат сборки, относящиеся к Slverlight, которые ссылаются на другие сборки, которых в GAC нет.   Полный текст ошибки, который был у меня: Error 1 The "ValidateXaml" task failed unexpectedly. System.IO.FileNotFoundException: Could not load file or assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. Не удается найти указанный файл. File name: 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'    at System.ModuleHandle.ResolveType(Int32 typeToken, Runtim...

Silverlight: Как определить активно ли приложение / окно Silverlight, имеет ли оно фокус.

Silverlight 3. У меня был некий перерыв в работе с Silveright и что-то я не вспомнил, как определить, что окно / приложение Silverlight активно или нет. И сделать это нужно вне зависимости, браузерное это приложение Silverlight или это "Out Of Brouser", всю страницу в браузере это занимает или нет.   Проблема в том, что события LostFocus и GotFocus не дают возможности определить, что приложение активно или нет.   Пока я это сделал через отслеживание событий на корневом элементе - Application .Current.RootVisual .   Если вы мне подсажете / напомните, как это определять более красиво, то буду вам очень благодарен.   Конечно я это не тестировал на всех вариантах работы Silverlight, но полагаю, что это должно работать.   Идея следующая, например, для определения того, что приложение не активно: Если после события потери фокуса происходит событие MouseLeave, то значит приложение перестало быть активным. Любое же событие получение фокуса говорит о том, что приложени стало активным.

Silverlight: Популярный вариант утечки памяти связанный с динамическиизменяемым деревом элементов приложения Silverlight.

Изображение
Нужно помнить следующий вариант утечки памяти, т.к., как мне кажется, он один из самых частых. Вы создали элемент. (Все, забудьте в WPF / Silverlight слово "контрол"  ). Вы добавляете этот элемент динамически в дерево элементов приложения Silverlight. По действию пользователя вы заменяете этот элемент его новым инстансом (экземпляром). Все красиво работает, все заменяется и потом удаляется сборщиком мусора, но до тех пор, пока вы не привяжете методы экземпляра вашего элемента, как обработчики событий элементов, постоянно находящихся в иерерхии элементов вашего Silverlight приложения. Например, очень часто нужно реагировать на события Application .Current.RootVisual . ! Будте внимательны. Как только вы начинаете использовать элемент, как динамически добавляемый / заменяемый / удаляемый, то вы больше не может (не имеете права) привязывать методы его экземпляра к событиям элементов постоянно находящихся в иерархии приложе...

Silverlight: "Тонкий" баг в TreeView при снятии выделения со всехэлементов.

Silverlight 3.0, TreeView from Toolkit October 2009. Задача: Если снять выделение со всех элементов TreeView, то ранее выделенный элемент опять станет выделенным, если окно Silverlight тут же потеряет фокус а потом получит опять. Решение: Недостаточно просто снять выделение с элемента TreeView, нужно так же снять с него фокус. Вот код, который обходит эту проблему. public static void UnseslectAllTreeViewItems( TreeView treeView) {     //treeView.SetSelectedContainer(null);     var selectedContainer = treeView.GetSelectedContainer();      if (selectedContainer != null )      {          selectedContainer.IsSelected = false ;      }     // Bug resolving     var focusedElement = FocusManager .GetFocusedElement();     if (focusedElement != null   ...

Silverlight: TreeView Unselect All Items (v.2).

Silverlight 3.0, TreeView from Toolkit October 2009. Задача: В элементе TreeView у которого есть выбранный дочерний ItemTreeView сделать так, чтоб не один элемент не был выбран. Простая задача, но что если у вас она не работает! Решение: Есть! Предположим вы используете следующий код: var selectedContainer = VerticalMenuTreeView.GetSelectedContainer(); if (selectedContainer != null) {     selectedContainer.IsSelected = false; } или такой: OrgTreeView.SetSelectedContainer(null); но он не дает никакого результата. Скорее всего вы прибиндили SelectedValue вашего TreeView к какому-то элемненту и забыли в привязке указать Mode=OneWay . Вот правильный XAML: DataContext ="{ Binding SelectedValue , ElementName =OrgTreeView, Mode =OneWay}" А вот XAML приводящий к багу: DataContext ="{ Binding SelectedValue , ElementName =OrgTreeView}" Главное не забудте указать Mode=OneWay  во всех привязках! Когда вы пытаетесь в коде первым или вторым способом снять выделение в дереве,...

Silverlight: TreeView Multi Selection and Multi Drag & Drop.

Silverlight 3.0, TreeView from Toolkit October 2009. Tags: TreeView MultiSelection and Multi Drag & Drop. Yes! We do it! :) Изменено: v.1.2. Задача: Сделать чтоб в TreeView можно было выбирать мнгого элементов. Также обеспечить для выбранных элементов множественный Drag And Drop. Решение: Реализовать множественный выбор и Drag Drop в TreeView можно через низлежащий объект данных. А точноее через иерархию этих объектов. Нужно, также, реагировать на нажатие клавиш Контрол и Шифт. На самом деле, если вы захотите польностью подражать поведению проводника Windows, к примеру, то вам понадобится еще много чего сделать и поковыряться в событийной модели Silverlight. Например определить, когда приложение Silverlight активно, а когда фокус находится в другом окне. Код я не выкладываю, т.к. это написано для одного приложения. Не могу сейчас тратить время на вынос в красивый самостоятельный функционал, т.к. используется много другого разработанного функционала, например отложенное выделение / ...

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) {...

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, а они не появятся. Неизвестно чего еще не будет работать и чего выкинули Я не дизайнер, но темы просто кричат своей непродуманностью и топорностью в некоторых мо...

Silverlight: Общие типы / объекты между двумя WCF - сервисами побыстрому.

Задача: между двумя сервисами передавать общий объект одного класса (типа) на стороне клиента. Т.е. Silverlight получает кастомный объект из одного сервиса, обрабатывает его и передает в другой сервис/ы. Чтоб сделать так, вынесите общий тип в общий проект. Этот проект должен быт Silverlight class library. Мне даже не пришлось выкидывать конфликтующие с полным .NET Framework сборки при добавлении референса на общий Silverlight проект в проект Web-сайта. Видимо, это будет работать пока не испольуются какие-либо сложные типы, например List<ЧтоТо>. Оказалось в WCF задача решается, как и в обычных Web-сервисах ASP.NET – через внешнюю сборку, на которую ссылаются оба проекта - и клиент и сервис. Но есть еще проблема с INotifyPropertyChanged. Нельзя создать общий проект / сборку содержащую класс, наследованный от INotifyPropertyChanged, потому что этот интерфейс определен в сборке System для Silverlight, но не для полного .NET Framework. Вот такая ошибка получается при этом: The type ...

Silverlight: В TreeView в XAML нельзя помещать вперемешку TreeViewItem и другие элементы.

Unhandled Error in Silverlight Application Code: 1001 Category: ParserError Message: AG_E_UNKNOWN_ERROR File: Line: 123 Position: 321 Если в TreeView или в TreeViewItem поместить в разметке вперемешку TreeViewItem и другие элементы, то при установке item.IsExpanded = true; получите выше приведенное исключение. Обнаружено в Silverlight 3 Toolkit October 2009

Silverlight: Улучшенный TreeView с CheckBox. Добавил детальное представление и фильтрацию элементов для детального представления - TreeView Using CheckBoxes improvement

Есть в Silverlight Toolkit пример Using CheckBoxes in a TreeView – Использование чекбоксов в дереве. Я его срочно доработал :). Посмотреть готовый припер вы можете сразу по этой ссылке Check Hierarhy Perfect Скачать проект здесь . В Silverlight есть TreeView в котором вставлены CheckBox. Изменение этих CheckBox связано как вверх по иерархии, так и вниз. Как это работает в Toolkit можно посмотреть здесь (внимание, долго грузиться, тк сразу все примеры из Toolkit) . Я чуть-чуть доработал это приер и вот что мне удалось туда добавить работа с детальным представление и чтоб в изменения в детальном представлении изменяли отображение самого TreeView Избавиться от обработчика события клика по элементу дерева Дабавил возможность разделения элементов между деревом и детальным представлением. Например у структуре организации у вас есть подразделения и сотрудники и вы хотите в дереве отобаржать только подразделения, а в детальном DataGrid или другом TreeView сотрудников. Ну по псякому может...

WPF: DataGrid в WPF не поддерживает полноценной работы с валидацией, в отличии от Silverlight DataGrid

На данный момент я не нашел способа программно в UI (!!! а не в бизнес объектах) определить, валидны ли строки или ячейки в DataGrid WPF. Стандартные уловки с LogicalTreeHelper.GetChildren(...) и Validation.GetHasError(...) на теперешнем июльском 2009 DataGrid не работают. А вот разработчики Silverlight Toolkit такого промоха не допустили. Вот и пригодился мой подход с самопальными Validation Groups как у ASP.NET, который я притянул в WPF и о котором писал ранее. Так что, не все так хорошо в датском королевстве :) Но ждем лучшего, т.к. .NET Framework 4 не загорами.

Microsoft Web Platform Installer 2.0 у меня как-то криво ставит Silverlight 3

Unable to start debugging. The Silverlight managed debugging package isn't installed Попробуйте переустановить Microsoft® Silverlight™ 3 Tools for Visual Studio 2008 SP1 , только не используйте для этого Web Platform Installer 2.0. И еще, хоть Microsoft® Silverlight™ 3 Tools for Visual Studio 2008 SP1 и не поддерживает Widows Server 2003, но всеравно там работает. У этой проблемы есть и более стандартный ответ, но с ним вам поможет Google.com, который вам скажет, что у вас не установлен Silverlight Developer Runtime. Это одна из частей, как раз вхдящая в Silverlight™ 3 Tools for Visual Studio 2008 SP1. Вообще  корень проблемы в том, что Microsoft Web Platform Installer 2.0 у меня ставит как-то криво, что даже Silverlight на работает.