Suporte de zoom do navegador Silverlight 3, a interface do usuário para de renderizar durante as mudanças de zoom

StackOverflow https://stackoverflow.com/questions/1556969

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>
Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top