2008-09-23 22 views
2

作爲my previous question的後續,我想知道如何正確使用透明窗口。如果我已將窗口設置爲使用透明度,則界面偶爾會顯示停止響應。實際發生的事情是,用戶界面根本不會更新。動畫不會出現,頁面不會導航;然而,如果你看着調試器點擊按鈕,鏈接等等,確實有效。最小化和恢復窗口「再次捕捉」用戶界面,用戶可以繼續工作,直到行爲恢復。WPF透明邊框導致UI停止重繪

如果我刪除透明邊框,行爲不會發生。我做錯了什麼或者是否有其他一些設置,代碼等等,我需要實現以正確處理透明邊框?

這是我的代碼失敗的窗口聲明。

<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" > 

並沒有表現出在Windows XP SP2的行爲

<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" > 

回答

1

我認爲我終於找到了解決方法。從我讀過的所有內容都不應該出現在XP SP3 & .NET 3.5 SP1中,但它是。

this blog post這個例子展示瞭如何使用Win32 API函數來創建一個不規則形狀的窗口,這正是我正在做的,在重做我的主窗口以使用這些技術之後,事情似乎按預期工作,行爲沒有返回

同樣值得注意的是,作者推薦這種方法的原因是由於WPF和透明窗口的性能問題,雖然我相信它在.NET 3.5 SP1中可能會更好,並不是很難實現,應該表現得更好。

2

您正在使用.NET 3.0或.NET 3.5的代碼?如果是這樣,這是透明窗口API的一個已知問題,已經在XP的.NET 3.5和SP3中修復(我認爲Vista的SP1)。基本上,當您將AllowsTransparency設置爲True時,WPF管道必須以純軟件模式呈現。這會導致大多數系統的性能顯着下降。

不幸的是,解決此問題的唯一方法是升級到.NET 3.0 SP1(包含在.NET 3.5中),並安裝適用於Windows的相應Service Pack。請注意,透明窗口仍然較慢,但幾乎沒有那麼糟糕。你可以找到更深入的討論here

0

我在Windows XP Pro SP3上運行並使用.NET 3.5 SP1。我還證實,該項目的目標是該框架的3.5版本。

+0

在那篇博客文章中,有人說有些視頻卡驅動程序通過系統內存做了位圖拷貝,也許更新視頻博士提供者會有所幫助。 – 2008-09-23 19:21:48

+0

我再次檢查,視頻驅動程序已與最新的最新。我應該提到,這是發生在每個已經過測試的工作站上(其中約有10個) – palehorse 2008-09-23 20:40:29