Suporte de zoom do navegador Silverlight 3, a interface do usuário para de renderizar durante as mudanças de zoom
-
21-09-2019 - |
Pergunta
Silverlight 3 agora contém suporte de zoom de navegador. O problema atual que estou enfrentando é que parece que a interface do usuário do Silverlight não se atualiza (renderize novamente durante várias alterações no nível de zoom envolvendo (roda de mouse Ctrl+) ou (Ctrl+) e (Ctrl-). Isso foi encontrado ao testar com o navegador IE8, em um Windows XP SP2.
No começo, pensei que isso poderia ser um problema de desempenho ao renderizar meu aplicativo, mas também consegui reproduzir o mesmo problema com apenas algum texto e um botão na minha página (o teste XAML pode ser encontrado no final da postagem). Em alguns casos, a interface do usuário para de responder (mouse por alterações visuais). Em outros, a página está respondendo, mas não é renderizada para o nível de zoom correto.
Eu poderia implementar minha própria funcionalidade de zoom, mas acho que seria melhor a longo prazo para deixar o navegador ou o plug -in manipular os recursos do zoom (por que codificar o mesmo recurso duas vezes?). Também estou pensando em desativar o suporte do AutoZoom para o aplicativo Silverlight.
Depois de analisar algumas outras implementações do Silverlight, descobri que a maioria deles que não desative o AutoZoom tem o mesmo problema. Depois de olhar para o problema um pouco mais profundo, a interface do usuário seria corrigida quando o tamanho da janela do navegador mudou (pois isso força a interface do usuário a atualizar seu tamanho de renderização que corrige o problema) ou se a página for rolada (o que também parece enviar uma renderização atualização para a interface do usuário). Alguém sabe de uma maneira de resolver esse problema ou uma solução alternativa que não envolve a gravação de código de zoom personalizado?
Aqui estão as etapas que usei para produzir o problema. (Se você gostaria do projeto de teste que eu usei, avise -me e posso enviar um e -mail para você.)
Etapa 1: Crie um novo aplicativo Silverlight usando o Visual Studio 2008. Etapa 2: Adicione o XAML à página principal (xaml no final da minha postagem). Etapa 3: Execute o aplicativo no IE8 usando a página HTML e a página de início padrão. Etapa 4: Altere o nível de zoom usando (roda de mouse ctrl+). Você pode ter que mover a roda do mouse muito rapidamente até que isso ocorra pela primeira vez. Geralmente ampliando o zoom e depois o zoom rapidamente. Nota: Após a etapa 4, a interface do usuário terá alguns dos problemas que afirmei acima. Isso foi produzido em 6 máquinas diferentes em execução do IE8.
XAML Código para o arquivo principal:
<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>
Solução
Eu tive o mesmo problema e no meu caso o<param name="windowless" value="true" />
foi a solução. Os valores Min e Max não são requisitos para fazê -lo funcionar.
Outras dicas
Fui ao Fórum do Silverlight sobre esse problema, mas ninguém havia o problema ou não sabia como corrigi -lo. O que eu fiz foi definir uma altura e largura min em meu controle na página HTML e no XAML. Desde que fiz isso, o problema não voltou. Embora ainda não esteja claro por que isso parecia ser um problema. Se alguém está tendo um problema semelhante, consulte o código de exemplo abaixo:
#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>