Поддержка масштабирования браузера Silverlight 3, пользовательский интерфейс останавливает рендеринг при изменении масштаба

StackOverflow https://stackoverflow.com/questions/1556969

Вопрос

Silverlight 3 теперь содержит встроенную поддержку масштабирования браузера.Текущая проблема, с которой я столкнулся, заключается в том, что кажется, что пользовательский интерфейс Silverlight не обновляется (перерисовывается) во время нескольких изменений уровня масштабирования с использованием (Ctrl+Колесо мыши) или (Ctrl+) и (Ctrl-).Это было обнаружено при тестировании браузера IE8 в Windows XP SP2.

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

Я мог бы реализовать свою собственную функцию масштабирования, но думаю, что в долгосрочной перспективе было бы лучше позволить браузеру или плагину обрабатывать функции масштабирования (зачем кодировать одну и ту же функцию дважды?).Я также подумываю об отключении поддержки автоматического масштабирования для приложения silverlight.

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

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

Шаг 1:Создайте новое приложение Silverlight с помощью Visual Studio 2008.Шаг 2:Добавьте Xaml на главную страницу (xaml в конце моего поста).Шаг 3:Запустите приложение в IE8, используя HTML-страницу и стартовую страницу по умолчанию.Шаг 4:Измените уровень масштабирования, используя (Ctrl+колесо мыши).Возможно, вам придется очень быстро вращать колесо мыши, пока это не произойдет в первый раз.Обычно масштабирование увеличивается, а затем быстро уменьшается.Примечание:После шага 4 в пользовательском интерфейсе возникнут некоторые проблемы, о которых я говорил выше.Это было сделано на 6 разных машинах под управлением IE8.

Код Xaml для файла MainPage:

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Background="LightGray" Grid.Row="0">
        <TextBlock Text="Testing Web Page" FontSize="16" FontWeight="Bold" 
                                                           Foreground="Green"/>
    </StackPanel>
    <Button Grid.Row="1" Content="Large Damn Button" Height="34"/>
</Grid>
Это было полезно?

Решение

У меня была такая же проблема, и в моем случае<param name="windowless" value="true" />было решение.Минимальные и максимальные значения не требуются для работы.

Другие советы

Я зашел на форум Silverlight по поводу этой проблемы, но ни у кого не было проблемы или никто не знал, как ее исправить.Я установил минимальную высоту и ширину для своего элемента управления на странице Html и в xaml.После этого проблема не вернулась.Хотя мне до сих пор неясно, почему это стало проблемой.Если у кого-то возникла подобная проблема, посмотрите пример кода ниже:

#silverlightControlHost {
    height: 100%;
    text-align:center;
    margin:0;
    padding:0;
    min-height:550px;
    min-width:800px;
}

 <form id="form1" runat="server" style="height:100%;width:100%;position:absolute;top:0px;left:0px;z-index:0;min-height:550px;min-width:800px">
<div id="silverlightControlHost" style="height:100%;width:100%;min-height:550px;min-width:800px">
   <object id="slControl" data="data:application/x-silverlight-2," type="application/x-silverlight-2" style="position:absolute;top:0px;left:0px" width="100%" height="100%">
      <param name="source" value="ClientBin/Dupree.xap"/>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="3.0.40624.0" />
      <param name="autoUpgrade" value="true" />
      <param name="EnableGPUAcceleration" value="true" />
      <param name="maxframerate" value="30" />
      <param name="windowless" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object>
    <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>
</form>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top