Domanda

A seguito di la mia domanda precedente , sono chiedendosi come utilizzare correttamente le finestre trasparenti. Se ho impostato la finestra per utilizzare la trasparenza, l'interfaccia utente a volte sembrerà smettere di rispondere. Quello che sta realmente accadendo è che l'interfaccia utente semplicemente non si aggiorna come dovrebbe. Le animazioni non si verificano, le pagine non sembrano navigare; tuttavia, se guardi il debugger fare clic su pulsanti, collegamenti, ecc., effettivamente funziona. Ridurre a icona e ripristinare la finestra "recupera" l'interfaccia utente di nuovo e l'utente può continuare a lavorare fino a quando il comportamento non ritorna.

Se rimuovo i bordi trasparenti, il comportamento non si verifica. Sto facendo qualcosa di sbagliato o c'è qualche altra impostazione, codice, ecc ... che devo implementare per funzionare correttamente con i bordi trasparenti?

Ecco la mia dichiarazione della finestra per il codice che fallisce.

<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 il codice che non mostra il 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" >
È stato utile?

Soluzione 2

Penso di aver finalmente trovato una soluzione alternativa. Da tutto ciò che ho letto questo problema non dovrebbe verificarsi con XP SP3 & amp; .NET 3.5 SP1, ma lo è.

L'esempio di questo post del blog mostra come utilizzare le funzioni API Win32 per creare una finestra di forma irregolare, che è ciò che sto facendo. Dopo aver rielaborato la mia finestra principale per utilizzare queste tecniche, le cose sembrano funzionare come previsto e il comportamento non è tornato.

Si noti inoltre che il motivo per cui l'autore raccomanda questo metodo è dovuto a problemi di prestazioni con WPF e finestre trasparenti. Anche se credo che in .NET 3.5 SP1 potrebbe essere meglio di così, non è stato così difficile da implementare e dovrebbe funzionare meglio.

Altri suggerimenti

Stai utilizzando .NET 3.0 o .NET 3.5 su Windows XP SP2? In tal caso, questo è un problema noto con l'API della finestra trasparente che è stata risolta in .NET 3.5 e SP3 di XP (e penso che SP1 di Vista). Fondamentalmente quando si imposta AllowsTransparency su True, la pipeline WPF deve eseguire il rendering in modalità solo software. Ciò causerà un degrado significativo delle prestazioni sulla maggior parte dei sistemi.

Sfortunatamente, l'unica cosa che puoi fare per risolvere questo problema è aggiornare a .NET 3.0 SP1 (incluso in .NET 3.5) e installare il service pack appropriato per Windows. Nota che le finestre trasparenti sono ancora più lente, ma non altrettanto brutte. Puoi trovare una discussione più approfondita qui .

Sono in esecuzione su Windows XP Pro SP3 e utilizzo .NET 3.5 SP1. Ho anche verificato che il progetto è destinato alla versione 3.5 del framework.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top