質問

のフォローアップとして 私の前の質問, 透明窓の正しい使い方が気になります。ウィンドウが透明度を使用するように設定している場合、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" >
役に立ちましたか?

解決 2

ようやく回避策が見つかったと思います。私が読んだ限りでは、この問題は XP SP3 および .NET 3.5 SP1 では発生しないはずですが、実際に発生しています。

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

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

他のヒント

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

残念ながら、この問題を修正するためにできる唯一の方法は、.NET 3.0 SP1 (.NET 3.5 に含まれる) にアップグレードし、Windows 用の適切な Service Pack をインストールすることです。透明なウィンドウは依然として遅いですが、それほど悪くないことに注意してください。より詳細なディスカッションを見つけることができます ここ.

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top