Silverlight 3 现在包含内置的浏览器缩放支持。我目前面临的问题是,在涉及(Ctrl+鼠标滚轮)或(Ctrl+)和(Ctrl-)的多个缩放级别更改期间,Silverlight UI 似乎没有更新(重新渲染)。这是在 Windows XP SP2 上使用 IE8 浏览器进行测试时发现的。
起初我认为这可能是呈现我的应用程序时的性能问题,但我也设法在我的页面上仅使用一些文本和一个按钮重现了相同的问题(测试 xaml 可以在帖子末尾找到)。在某些情况下,UI 会停止响应(将鼠标悬停在视觉变化上)。在其他情况下,页面正在响应,但未针对正确的缩放级别进行渲染。
我可以实现自己的缩放功能,但我认为从长远来看,让浏览器或插件处理缩放功能会更好(为什么要对相同的功能进行两次编码?)。我也在考虑禁用 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>