Silverlight 3浏览器缩放支持,UI在缩放更改期间停止渲染

时间:2009-10-12 21:10:49

标签: silverlight internet-explorer-8 zooming

Silverlight 3现在包含内置的浏览器缩放支持。我面临的当前问题是,在涉及(Ctrl +鼠标滚轮)或(Ctrl +)和(Ctrl-)的多个缩放级别更改期间,似乎Silverlight UI不会更新(重新渲染)。在Windows XP SP2上使用IE8浏览器进行测试时发现了这一点。

起初我认为在渲染我的应用程序时这可能是一个性能问题,但我也设法重现了同样的问题只有一些文本和我的页面上的按钮(测试xaml可以在帖子的末尾找到) 。在某些情况下,UI停止响应(鼠标悬停在视觉上的变化)。在其他情况下,Page正在响应,但未针对正确的缩放级别进行渲染。

我可以实现自己的缩放功能,但我认为从长远来看,让浏览器或插件处理缩放功能会更好(为什么要对相同的功能进行两次编码?)。我也在考虑禁用silverlight对Silverlight应用程序的支持。

在查看其他一些Silverlight实现后,我发现其中大多数不禁用自动缩放的实现具有相同的问题。在深入研究问题后,当浏览器窗口大小发生变化时,UI会被纠正(因为这会强制UI更新其渲染大小以纠正问题),或者页面是否滚动(也似乎发送了渲染)更新到UI)。有没有人知道解决此问题的方法或不涉及编写自定义缩放代码的解决方法?

以下是我用来解决问题的步骤。 (如果您希望我使用的测试项目让我知道,我可以通过电子邮件发送给您。)

步骤1:使用Visual Studio 2008创建新的Silverlight应用程序。 第2步:将Xaml添加到主页面(我帖子末尾的xaml)。 步骤3:使用html页面和默认开始页面在IE8中运行应用程序。 步骤4:使用(Ctrl +鼠标滚轮)更改缩放级别。您可能需要非常快速地移动鼠标滚轮,直到第一次发生这种情况。通常放大然后快速缩小。 注意:在第4步之后,UI将出现我上面提到的一些问题。这是在运行IE8的6台不同机器上生成的。

MainPage文件的Xaml代码:

<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 个答案:

答案 0 :(得分:1)

我有同样的问题,在我的情况下 <param name="windowless" value="true" /> 是解决方案。最小值和最大值不需要使其工作。

答案 1 :(得分:0)

我去了关于这个问题的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>