Проблема с отображением Silverlight

Я создал красивый элемент управления silverlight, делающий именно то, что я хочу, и он выглядит великолепно :) Когда я размещаю его в тестовом проекте файла образца ASPX или файла образца HTML, он хорошо отображается.

Теперь мне нужно использовать элемент управления в моем существующем проекте ASP.NET 2.0, который имеет необычный дизайн. Проблема, с которой я столкнулся, заключается в том, что элемент управления не отображается точно так, как должен:

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

Очевидно, причина этого в моем дизайне HTML / CSS, но поиск проблемы займет очень много времени - так есть ли у кого-нибудь знания в этой области? Каковы правила обеспечения правильного отображения элемента управления? Какие свойства CSS следует использовать?

PS: Поскольку у меня есть приложение 2.0, я использую подход объектных тегов к Silverlight, и он содержится в DIV с высотой и шириной, установленными в стиле.

Запрошен фрагмент кода. Это примерно так (в основном копия тестовой HTML-страницы из тестового проекта silverlight (которая отлично работает)):

<div id="silverlightControlHost" style="height: 300px; width: 750px;">
    <object data="data:application/x-silverlight," type="application/x-silverlight-2-b2"
    width="100%" height="100%">
    <param name="source" value="Contiki.SilverLight.FileUploader.xap" />
    <param name="onerror" value="onSilverlightError" />
    <param name="background" value="white" />                            
    <a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">
        <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
        style="border-style: none" />
    </a>
    </object>
    <iframe style='visibility: hidden; height: 0; width: 0; border: 0px'></iframe>
</div>

Этот DIV содержится в ячейке таблицы, которая снова является частью более крупного проекта. Как уже упоминалось, много CSS. Не знаю, поможет ли это ...


person Torbjørn    schedule 01.10.2008    source источник


Ответы (4)


Причину нашел сам ...

Оказывается, в Silverlight проблема с отображением, когда элемент управления помещается в таблицу html. Нашла информацию об этом на форуме Silverlight. Речь шла о бета-версии 2, но я обновился до релизной версии, и это все еще проблема.

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

В основном, когда таблица визуализировалась, она не могла «видеть» размер содержимого, поэтому она либо не отображалась вообще, либо отображалась только до размера одного символа пробела.

- Джон Стоктон

Мой дизайн довольно сложен с вложенными таблицами, поэтому я еще не смог заставить его работать.

ОБНОВЛЕНИЕ:

Фактическое исправление, которое я в итоге реализовал, было небольшим JavaScript, который «обновляет» содержащий ‹DIV›. Вот:

<script type="text/javascript">
    function refreshSL()
    {
        var div = document.getElementById('silverlightControlHost');
        div.style.display = 'block';
    }
    refreshSL();
</script>

Я поместил это в свой HTML-код под фактической разметкой SL, и тогда он сработал (я думаю, правильнее было бы вызвать его в событии загрузки страницы.

person Torbjørn    schedule 22.10.2008

Иногда бывает сложно отладить проблемы с CSS. Одинаково ли поведение в разных браузерах? Ваш CSS где-нибудь использует "float"? Правильно ли работает приложение на той же странице за пределами таблицы, а затем за пределами div?

person Adam Kinney    schedule 01.10.2008

Как говорит Адам, проблемы с CSS - это настоящая PITA. Обычно, когда я сталкиваюсь с чем-то вроде этого, я начинаю с указания на пустой CSS вместо «причудливого», а затем снова начинаю добавлять стили, пока не смогу воспроизвести проблему.

person Bryant    schedule 02.10.2008

ржу не могу

У меня была точно такая же проблема, и она сводила меня с ума. Проблема была изолирована от Internet Explorer. Прекрасно работает во всех других браузерах (даже в Opera).

Ваше решение - это наверняка взлом. Поскольку это действительно обход ошибки в IE, вы можете официально избавиться от нее.

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

person Community    schedule 12.04.2009