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

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

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

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

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

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

Шаг 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>

Ответы [ 2 ]

1 голос
/ 19 мая 2011

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

0 голосов
/ 08 июня 2010

Я пошел на форум 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>
...