WPF透過ボーダーでUIの再描画が中止される


2

以下のように、my previous questionまで、透明なウィンドウを正しく使用する方法が不思議です。透明性を使用するようにウィンドウを設定した場合、UIが応答を停止するように見えることがあります。実際に起こっているのは、UIが単純に更新されていないということです。アニメーションは発生せず、ページはナビゲートされていないように見えます。しかし、ボタン、リンクなどをクリックしてデバッガを見ると、実際には動作します。ウィンドウを最小化して復元すると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" > 

とコードの挙動を示さない

<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ではそれが優れていると思われますが、これは

  0

私がリンクしているブログの記事によると、これはVistaで問題を引き起こす可能性がある。あなたがそれをサポートする必要がないなら、素晴らしい。もしそうなら、あまりにも遠くに行く前にVista上でテストするようにしてください:) 24 9月. 082008-09-24 17:17:06


2

は、Windows XP SP2上の.NET 3.0、または.NET 3.5を使用していますか?もしそうなら、これはXPの.NET 3.5とSP3で修正された透明ウィンドウAPIの既知の問題です(VistaのSP1もそうだと思います)。基本的にAllowsTransparencyをTrueに設定すると、WPFパイプラインはソフトウェアのみのモードでレンダリングする必要があります。これにより、ほとんどのシステムでパフォーマンスが大幅に低下します。

残念ながら、これを修正するには、.NET 3.0 SP1(.NET 3.5に付属)にアップグレードし、Windows用の適切なサービスパックをインストールする必要があります。透明なウィンドウはまだ遅いが、それほど悪くはないことに注意してください。あなたはより深い議論hereを見つけることができます。


0

私はWindows XP Pro SP3および.NET 3.5 SP1を使用しています。また、このプロジェクトがバージョン3.5のフレームワークをターゲットにしていることも確認しました。

  0

このブログ記事では、一部のビデオカードドライバがシステムメモリ経由でビットマップコピーを行ったと言われています。 iversが助けになるでしょう。 23 9月. 082008-09-23 19:21:48

  0

私は二重にチェックされて、ビデオドライバは、最新のもので、すでに最新です。私はこれがテストされているすべてのワークステーション(約10人)で起こっていると述べておきたい。 23 9月. 082008-09-23 20:40:29