Silverlight 3 には、組み込みのブラウザー ズーム サポートが含まれるようになりました。私が直面している現在の問題は、(Ctrl+マウス ホイール) または (Ctrl+) と (Ctrl-) を含む複数のズーム レベルの変更中に、Silverlight UI が更新 (再レンダリング) されないように見えることです。これは、Windows XP SP2 で IE8 ブラウザーをテストしたときに見つかりました。
最初は、アプリケーションをレンダリングするときのパフォーマンスの問題かもしれないと思っていましたが、ページのテキストとボタンだけで同じ問題を再現することもできました (テスト xaml は投稿の最後にあります)。場合によっては、UI が応答を停止します (視覚的な変化にマウスを合わせると)。他のページでは、ページは応答していますが、正しいズーム レベルでレンダリングされていません。
独自のズーム機能を実装することもできますが、長期的にはブラウザーまたはプラグインでズーム機能を処理できるようにする方がよいと思います (なぜ同じ機能を 2 回コーディングするのですか?)。また、Silverlight アプリケーションのオートズーム サポートを無効にすることも検討しています。
他のいくつかの Silverlight の実装を調べたところ、自動ズームを無効にしない大多数の実装で同じ問題が発生していることがわかりました。問題をもう少し詳しく調べた後、ブラウザー ウィンドウのサイズが変更された場合 (これにより、UI がレンダリング サイズを更新して問題を修正するため)、またはページがスクロールされた場合 (レンダリングを送信しているように見えるため)、UI は修正されます。 UI を更新します)。この問題を解決する方法、またはカスタム Zooming コードの記述を伴わない回避策を知っている人はいますか?
問題を作成するために使用した手順は次のとおりです。(私が使用したテスト プロジェクトが必要な場合は、お知らせください。メールでお送りします。)
ステップ 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>