2

前回の質問のフォローアップとして、透明なウィンドウを正しく使用する方法を知りたいです。ウィンドウに透過性を使用するように設定した場合、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" >
4

3 に答える 3

2

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

残念ながら、これを修正するには、.NET 3.0 SP1 (.NET 3.5 に含まれています) にアップグレードし、Windows 用の適切なサービス パックをインストールするしかありません。透明なウィンドウはまだ遅くなりますが、それほど悪くはないことに注意してください。詳細については、こちらを参照してください。

于 2008-09-23T18:56:36.257 に答える
1

ようやく回避策を見つけたと思います。私が読んだすべてのことから、この問題は XP SP3 と .NET 3.5 SP1 では発生しないはずですが、発生しています。

このブログ投稿の例は、Win32 API 関数を使用して不規則な形状のウィンドウを作成する方法を示しています。これは私が行っていることです。これらの手法を使用するようにメイン ウィンドウを作り直した後、物事は期待どおりに機能しているように見え、動作が改善されました。返されません。

著者がこの方法を推奨する理由は、WPF と透過ウィンドウのパフォーマンスの問題によるものであることにも注意してください。.NET 3.5 SP1 の方が優れていると思いますが、実装はそれほど難しくなく、パフォーマンスも向上するはずです。

于 2008-09-23T22:42:31.380 に答える
0

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

于 2008-09-23T18:59:28.857 に答える