Каковы самые большие глюки в Silverlight? [закрытый]

Извините, я не обратил внимания: removeCompleted предоставит список удаленных элементов (я проверял наличие элементов с помощью $ ("mytag") в консоли). Теги были удалены из DOM, но не уничтожены. Поэтому мне просто нужно вызывать unmount () для каждого элемента, упомянутого в списке, и жизненный цикл тега будет соблюдаться.

19
задан Jeff Yates 16 August 2010 в 20:51
поделиться

17 ответов

Два, что я испытал:

Перекрестные Файлы Доменной политики

, Чтобы Silverlight работала с веб-сервисами, которые размещаются на другом домене, потребности сервера перекрестный файл доменной политики. Это может взять два формата:

  • clientaccesspolicy.xml
  • crossdomain.xml

я не мог заставить первого работать правильно, но последний работал (Flash использует второй, тогда как я полагаю, что первое характерно для ASP, хотя я не мог получить его работающий в соответствии с ASP.NET 2,0 сервера, таким образом, это может быть конкретно для 3.5).

ComboBox выпадающее изменение размеров

управление полем комбинированного списка Silverlight 2.0 только измеряет свою выпадающую область однажды, когда это сначала показывают. Это поэтому базируется, это - размер на начальных объектах в его списке. Это означает, что 2 объекта дадут Вам, 2 объекта высоко выпадают, даже когда список увеличивается до 200. Единственный путь вокруг этого, кажется, для замены комбинации совершенно новым управлением каждый раз изменение объектов.

Примечание, что установка свойства Height или свойства MaxHeight к значению, которое приводит к объектам, появляющимся от списка в начальном дисплее выпадающего, приведет к отсутствию вертикальной полосы прокрутки и поэтому, отсутствию доступа к объектам в Вашем списке. Единственное решение, которое я нашел к этому, состояло в том, чтобы использовать свойство MinHeight, чтобы, по крайней мере, иметь достойную высоту для всего использования и просто позволить ему быть больше, если объекты превышают ту минимальную высоту.

кроме того, при изменении размеров окна браузера, независимо от того, используете ли Вы MinHeight или нет, и затем или раскрываете комбинированный список или Вы изменяете размер, в то время как это видимо, это может безвозвратно уменьшить размер выпадающего.

Обновление

Вот действительно хорошее решение комбинированной проблемы , благодаря markti.

13
ответ дан 30 November 2019 в 02:04
поделиться

Печально, что Silverlight глотает столько исключений при отладке.

0
ответ дан 30 November 2019 в 02:04
поделиться

О, существуют загрузки. Позволяет запускаются с 3 глюков Браузера:

Что-либо кроме IE: объект Silverlight не масштабирует для соответствия окну браузера. Обходное решение: Поместите это между тегами:

<style type="text/css">
  html, body, form { height: 100% }
</style>

Также знать, что IE позволит Вам иметь свой dev веб-сайт в localhost и свой доступ к приложениям другие домены, тогда как другие браузеры не будут.

Safari: при использовании пользовательских заголовков ответа (которые полезны для того, чтобы сделать эффективную подкачку страниц в Услугах передачи данных), Safari может изменить случай названий заголовка, повреждающих приложение.

проблемы Видимости

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

, Если Вы получаете неожиданный неустойчивый ArgumentException, это может быть то, потому что у Вас есть код в событии щелчка кнопки, которое делает саму кнопку (или родитель его) невидимый. По-видимому, некоторый внутренний код бежит за событием щелчка, которое ожидает, что кнопка будет видима. Обойдите это путем создания короткого (100 мс, например) DespatcherTimer в событии щелчка и установки кнопки, невидимой в событии Tick.

DependencyObject / проблемы DependencyProperty

, Если Вы привыкли к способу, которым они работают в WPF, они полностью повреждаются в Silverlight. Если Вашими объектами данных будет DependencyObjects, то у Вас будет 2 проблемы. Каждый, это в SL DependencyProperties не имеет уведомления об изменении встроенным - если Вы захотите, чтобы они обновили привязку, то необходимо будет сделать объектную реализацию INotifyPropertyChanged. Другой - то, если Вы свяжете с набором DependencyObjects, то Вы получите очень странные эффекты. Необходимо использовать класс немного далее вниз иерархия управления - я наследовался FrameworkTemplate вместо этого. Таким образом, я рекомендовал бы, чтобы Ваши объекты данных были похожи на это:

public class CustomDataObject : FrameworkTemplate, INotifyPropertyChanged
{ ... }

Преобразователи

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

3
ответ дан 30 November 2019 в 02:04
поделиться

Отладка может быть хитрой, если она не работает, это могло бы быть, потому что Вы присоединяете к типу неверного кода на процессе. Попытка, вручную присоединяющая к процессу и, удостоверяется, что у Вас есть 'код Silverlight', выбранный вместо 'управляемого кода'. С тех пор это будет, вероятно, работать все время снова.

2
ответ дан 30 November 2019 в 02:04
поделиться

Некоторое время назад я сделал проект в Silverlight 2.0, и проект управлялся с помощью TDD и MVP. Мои сервисные ссылки были расположены в отдельном блоке, таким образом, представление не должно знать о модели. У меня был глюк с местоположением ServiceReferences. Файл ClientConfig , который должен быть в блоке представления!

Этот файл сгенерирован, если Вы добавляете сервисную ссылку. Мы были добавлены веб-сервис WCF, но я был плохо знаком с Silverlight и так не знал, что приложения Silverlight компилируются и упаковываются как XAP.

, Если Ваш ServiceReferences. Файл ClientConfig не расположен в этом XAP, у Вас есть проблемы.

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

Мое Исходное Сообщение

3
ответ дан 30 November 2019 в 02:04
поделиться

Используя IE6 и веб-хостинг Приложение Silverlight имеет включенные (заголовки HTTP 1.1) сжатия

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

4
ответ дан 30 November 2019 в 02:04
поделиться

Тот, который получил меня недавно, был то, что нет никакого свойства LayoutTransform (хотя существует свойство RenderTransform). Поэтому Вы не можете применить преобразование и испытывать смежное уважение элементов 'новые необходимые площади' управления, которое затем заставит его накладываться с другими элементами или иметь пробел.

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

4
ответ дан 30 November 2019 в 02:04
поделиться

Я нашел, что отладка поддержки невероятно облуплена. Это работало на меня однажды, но никогда с тех пор, независимо от того, что я пробую. Я думаю, что это может только правильно работать при отладке с помощью ASP.NET 3,5 сайта с помощью поддержки ASP Silverlight.

Решенный

проблема была с использованием Google Chrome. Поскольку Google Chrome размещает Silverlight в своем собственном процессе, отладчик не мог найти его. При отладке использования IE7 оно присоединяет прекрасный, но если Вы отлаживаете использование Chrome, необходимо вручную присоединить к соответствующей задаче Silverlight под Chrome, прежде чем оно будет работать.

Благодаря mattmanser для подсказки относительно того, какова проблема могла бы быть.

6
ответ дан 30 November 2019 в 02:04
поделиться

Отсутствие события двойного щелчка было один для меня. Я был поражен, что это, не там и продолжал смотреть в списке intellisense :-) Решенный это путем создания взлома на нем, но это не решение.

7
ответ дан 30 November 2019 в 02:04
поделиться

Странность ComboBox

Одна вещь, что Jeff Yates, упомянутый в его ответе , был странностью с ComboBoxes - я видел, что один лично, и также видел другого очень, очень раздражающую проблему с ними. При попытке изменить объекты в ComboBox от обработчика событий для события Click кнопки, то Вы получите загадочное сообщение об ошибке, о котором я не могу думать в данный момент. Мое решение его состояло в том, чтобы сделать, то же самое как в решении Jeff - удаляет поле комбинированного списка, создает новое, заливка, что один с измененным набором объекта, и добавляют что назад к содержанию панели.

Никакой ElementName, связывающий

Silverlight ничего не имеет analagous к ElementName WPF обязательная способность. Это сообщение имеет хорошее обходное решение, которое работало вполне прилично на меня.

Никакая поддержка событий колесика прокрутки мыши

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

событие No Unloaded на UserControls

Там является событием Loaded, но не Разгруженный - если Вы хотите удалить управление из экрана и выполнить некоторую разгружающуюся логику, Вам нужен к самокрутке способ сделать так. У меня есть интерфейс IUnloadable, который я получаю, мои средства управления от этого должны выполнить разгрузку логики и вызвать метод на него вручную когда настало время.

<час>

И наконец, это сообщение имеет некоторую хорошую информацию о том, что Silverlight пропускает по сравнению с тем, что имеет WPF.

8
ответ дан 30 November 2019 в 02:04
поделиться

Control's parented by resources...

Declaring a control in resources and then trying to parent it to a Popup later will result in an exception stating that the control already has a parent. In this scenario, there is no way to detect what the parent is and to remove it (I tried many different ways). The workaround was to wrap my control in a popup in the resources and then make my code either re-use that popup or just discard it in favour of my own by reparenting the control. As the control can identify the popup as its parent, this is easy to do.

0
ответ дан 30 November 2019 в 02:04
поделиться

Окно сообщений

Недавно я работал со статическим классом System.Windows.MessageBox (в настоящее время единственный способ получить что-то близкое к модальному приложению - а не просто к модальному пользовательскому интерфейсу - обратная связь с пользователем), и я обнаружил раздражающую обработку фокуса, при которой окно сообщения возвращает фокус браузеру, а не элементу управления Silverlight, который имел фокус до отображения окна сообщения , Это, несомненно, связано с тем, что плагин Silverlight использует браузер для отображения окна сообщения, но тем не менее он раздражает, и в сочетании с ограниченными возможностями, доступными для настройки окна сообщения, вскоре стало очевидно, что мне нужно что-то еще, чтобы обеспечить обратную связь с пользователем.

Блокировка доступа к пользовательскому интерфейсу при отображении всплывающего окна ...

После поиска в Интернете стало ясно, что мне нужно будет использовать какой-то модальный дисплей пользовательского интерфейса на основе [ +1246] Всплывающее примитива. Так, Я прокрутил свой собственный класс модального диалогового окна и обнаружил еще одну проблему в процессе.

Пользовательский интерфейс под всплывающим окном остается активным, что означает, что вкладки вокруг вас дадут вам доступ к элементам управления, которые вы пытаетесь скрыть. Чтобы смягчить это, я сначала попытался отключить страницу, получив RootVisual (то есть страницу) и установив IsEnabled в false . Это прекрасно работало, пока я не использовал свое диалоговое окно во время операции редактирования DataGrid . Код диалога работал дважды и никогда больше. Казалось, что отключение и включение сетки во время редактирования вызвало какую-то неустранимую проблему в Silverlight (возможно, утечка памяти, поскольку она в конечном итоге потерпела крах).

Оказалось, что для достижения того, что я хотел, самый простой способ - установить фокус на что-то в моем всплывающем диалоговом окне и установить для свойства TabNavigation значение KeyboardNavigationMode.Cycle . Таким образом, фокус никогда не покидает диалоговое окно, и поэтому основной интерфейс остается за пределами, но без создания вышеупомянутой проблемы.

2
ответ дан 30 November 2019 в 02:04
поделиться

Модальные всплывающие окна не поддерживаются Решение -Создать пользовательский элемент управления, который расширяет весь холст и установить прозрачность 0,05. как видно на примере приложения ScottGu Silverlight http://weblogs.asp.net/scottgu/pages/silverlight-2-end-to-end-tutorial-building-a-digg-search-client.aspx

Наборы данных не поддерживаются Решение - использовать LINQ to XML, который может считывать XML в общий список для целей привязки данных

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

Проблемы с пространством имен возникают при использовании инструментария AJAX вместе с тегом ASP.NET Silverlight.
Решение - используйте тег OBJECT вместо тега ASP.NET Silverlight.

1
ответ дан 30 November 2019 в 02:04
поделиться

Учетные данные недоступны для веб-запросов

Свойство Учетные данные недоступно в WebClient или HttpWebRequest . Вам необходимо выполнить запрос через прокси-службу , которая будет выполнять учетные данные .

4
ответ дан 30 November 2019 в 02:04
поделиться

OpenFileDialog / Изолированное хранилище

Для того, чтобы ваше приложение изначально использовало или увеличивало локальное хранилище, вы должны указать, сколько места вам нужно, а затем Silverlight запросит пользователя, если он / она хочет разрешить изменение. Все хорошо. Но есть одна загвоздка: если вы откроете диалоговое окно с файлом, то после этого невозможно получить больше места для хранения. В моем сценарии пользователь выбрал файл (ы), я обработал их, а затем вычислил, сколько места мне потребуется для сохранения обработанного файла. Но из-за этой проблемы мне пришлось угадывать максимальный размер этого файла и запрашивать хранилище на основе этого. Если бы файл был больше, пользователю пришлось бы проделывать весь процесс заново.

Система макета

Это действительно отстой. Пока вы явно не укажете размер элемента, вы получите NaN для всех свойств размера. Вы можете подключиться к каждому событию изменения размера и получить там значения, но в большинстве случаев вы не можете просто запросить высоту или ширину и получить то, что хотите.

Нет LayoutTransform

Упоминается выше Трэвисом

3
ответ дан 30 November 2019 в 02:04
поделиться

HttpWebRespone может иметь только один из двух кодов состояния

  • 200 OK
  • 404 Not Found

Это означает, что все остальные ошибки отображаются на 404, что довольно раздражает. Я не знаю, как работают перенаправления (надеюсь, они отслеживаются автоматически ...)

http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode (VS.95). aspx

4
ответ дан 30 November 2019 в 02:04
поделиться

Тот факт, что за короткий промежуток времени существует так много разных релизов.

Good - вещи, которые расстраивают, быстро исправляются. например, колесо прокрутки мыши, щелчок правой кнопкой мыши - исправляются в Silverlight 4.

Bad - если вы новичок, вы понятия не имеете, нужен ли вам документированный "хак" или нет. Я начинаю всё сначала с Silverlight 4 и нахожу тонну уроков и подсказок - но никогда не знаю, актуальны ли они или всё ещё лучший способ сделать это.

.
4
ответ дан 30 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: