2009-10-12 5 views
1

Silverlight 3 prend désormais en charge le zoom de navigateur intégré. Le problème actuel auquel je suis confronté est qu'il semble que l'interface utilisateur Silverlight ne se met pas à jour (restituer) pendant plusieurs changements de niveau de zoom impliquant le (Ctrl + Molette de la souris) ou (Ctrl +) et (Ctrl-). Cela a été trouvé lors de tests avec le navigateur IE8, sur un Windows XP SP2. Au début, je pensais que cela pouvait être un problème de performances lors du rendu de mon applcation mais j'ai aussi réussi à reproduire le même problème avec seulement du texte et un bouton sur ma page (le test xaml peut être trouvé à la fin du post). Dans certains cas, l'interface utilisateur cesse de répondre (survolez les changements visuels). Dans d'autres, la page répond mais n'est pas restituée pour le niveau de zoom correct.Silverlight 3 Prise en charge du zoom par navigateur, interface utilisateur Arrête le rendu lors des changements de zoom

Je pourrais implémenter ma propre fonctionnalité de zoom mais je pense qu'il vaudrait mieux à long terme laisser le navigateur ou le plugin gérer les fonctions de zoom (Pourquoi coder deux fois la même fonctionnalité?). J'envisage également de désactiver le support autozoom pour l'application silverlight. Après avoir regardé quelques autres implémentations Silverlight, j'ai trouvé que la majorité d'entre eux qui ne désactivent pas l'autozoom ont le même problème. Après avoir examiné le problème un peu plus profondément, l'interface utilisateur sera corrigée si la taille de la fenêtre du navigateur a changé (car cela oblige l'interface utilisateur à mettre à jour sa taille de rendu) ou si la page est défilée. mise à jour à l'interface utilisateur). Est-ce que quelqu'un connaît un moyen de résoudre ce problème ou une solution de contournement qui n'implique pas l'écriture de code Zoom personnalisé?

Voici les étapes que j'ai utilisées pour produire le problème. (Si vous souhaitez utiliser le projet de test, faites-le moi savoir et je vous l'enverrai par courriel.)

Étape 1: Créez une nouvelle application Silverlight à l'aide de Visual Studio 2008. Étape 2: ajoutez le Xaml à la page principale (xaml à la fin de mon message). Étape 3: Exécutez l'application dans IE8 en utilisant la page html et la page de démarrage par défaut. Etape 4: Modifiez le niveau de zoom en utilisant (Ctrl + molette de la souris). Vous devrez peut-être déplacer la molette de la souris très rapidement jusqu'à ce que cela se produise la première fois. Habituellement zoom avant puis zoom arrière rapidement. Remarque: Après l'étape 4, l'interface utilisateur rencontrera certains des problèmes mentionnés ci-dessus. Cela a été produit sur 6 machines différentes exécutant IE8.

Code Xaml pour le fichier 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> 
+0

Je peux reproduire cela, je vous suggère de poster un rapport de bug sur le site microsofts connect. – AnthonyWJones

Répondre

1

J'ai eu le même problème et dans mon cas, le <param name="windowless" value="true" /> était la solution. Les valeurs min et max ne sont pas nécessaires pour le faire fonctionner.

0

Je suis allé au forum silverlight sur cette question, mais il n'y avait personne ayant le problème ou ne savaient pas comment y remédier. Ce que j'ai fait était de définir une hauteur et une largeur Min sur mon contrôle dans la page Html et dans le xaml. Depuis ce temps, le problème n'est pas revenu. Bien que je ne sache toujours pas pourquoi cela semblait être un problème. Si quelqu'un a un problème similaire voir le code exemple ci-dessous:

#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> 
Questions connexes