WPF fronteiras transparentes faz com que a interface do usuário para redesenhar parada

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

Pergunta

Como um acompanhamento para minha anterior pergunta , estou perguntando como usar janelas transparentes corretamente. Se eu definir a minha janela para a transparência uso, a interface do usuário irá ocasionalmente parecer parar de responder. O que realmente está acontecendo é que a interface do usuário simplesmente não está atualizando como deveria. Animações não ocorrem, as páginas não aparecem para navegar; No entanto, se você assistir ao clicar depurador em botões, links, etc .. fazer realmente o trabalho. Minimizando e restaurando as "capturas up" janela da UI novamente e o usuário pode continuar trabalhando até que o comportamento volta.

Se eu remover as bordas transparentes, o comportamento não ocorre. Estou fazendo algo errado ou se há alguma outra configuração, código, etc ... que eu preciso para implementar a trabalhar com bordas transparentes corretamente?

Aqui está a minha declaração de janela para o código que falha.

<Window x:Class="MyProject.MainContainer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF APplication" Height="600" Width="800"    
    xmlns:egc="ControlLibrary" Background="{x:Null}"
    BorderThickness="0"
    AllowsTransparency="True"
    MinHeight="300" MinWidth="400" WindowStyle="None" >

E o código que não apresentam o comportamento

<Window x:Class="MyProject.MainContainer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF Application" Height="600" Width="800"    
    xmlns:egc="ControlLibrary" Background="{x:Null}"
    BorderThickness="0"
    AllowsTransparency="False"
    MinHeight="300" MinWidth="400" WindowStyle="None" >
Foi útil?

Solução 2

Eu acho que eu finalmente encontrei uma solução alternativa. De tudo que li este problema não deve estar ocorrendo com o XP SP3 e .NET 3.5 SP1, mas é.

O exemplo de este post mostra como usar as funções da API Win32 para criar uma janela de forma irregular, que é o que I "m fazendo. Depois de refazer a minha principal janela para usar estas técnicas, as coisas parecem estar funcionando como esperado eo comportamento não voltou .

É também de notar que a razão o autor recomenda este método é devido a problemas de desempenho com WPF e janelas transparentes. Enquanto eu acredito que pode ser melhor em .NET 3.5 SP1 que foi, este não foi tão difícil de implementar e deve ter um melhor desempenho.

Outras dicas

Você está usando .NET 3.0 ou .NET 3.5 no Windows XP SP2? Se assim for, este é um problema conhecido com a janela API transparente que foi corrigido no .NET 3.5 e SP3 do XP (e eu acho SP1 do Vista). Basicamente, quando você definir o AllowsTransparency como True, o gasoduto WPF tem de prestar somente no modo de software. Isto irá causar uma degradação significativa no desempenho na maioria dos sistemas.

Infelizmente, a única coisa que você pode fazer para corrigir isso é atualizar para .NET 3.0 SP1 (incluído no .NET 3.5), e instalar o service pack apropriado para o Windows. Note-se que as janelas transparentes ainda mais lento são, mas não tão ruim. Você pode encontrar uma discussão mais aprofundada aqui .

Estou executando no Windows XP Pro SP3 e usando .NET 3.5 SP1. Eu também ter verificado que o projeto tem como alvo a versão 3.5 do framework.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top