作为 my previous question 的后续行动,我想知道如何正确使用透明窗。如果我将窗口设置为使用透明度,UI 有时会出现停止响应的情况。实际发生的情况是 UI 根本没有按其应有的方式更新。不出现动画,页面似乎无法导航;然而,如果你观察调试器点击按钮、链接等......确实有效。最小化和恢复窗口会再次“ catch ”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" >
最佳答案
您在 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 的相应服务包。请注意,透明窗口仍然较慢,但也没有那么糟糕。您可以找到更深入的讨论here .
关于WPF透明边框导致UI停止重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/122857/