WPF透明边框导致UI停止重绘


2

作为my previous question的后续,我想知道如何正确使用透明窗口。如果我已将窗口设置为使用透明度,则界面偶尔会显示停止响应。实际发生的事情是,用户界面根本不会更新。动画不会出现,页面不会导航;然而,如果你看着调试器点击按钮,链接等等,确实有效。最小化和恢复窗口“再次捕捉”用户界面,用户可以继续工作,直到行为恢复。

如果我删除透明边框,行为不会发生。我做错了什么或者是否有其他一些设置,代码等等,我需要实现以正确处理透明边框?

这是我的代码失败的窗口声明。

<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中可能会更好,并不是很难实现,应该表现得更好。

  0

根据我链接到的博客文章,这可能会导致Vista上出现问题。如果你不需要支持,那很好。如果你这样做,一定要在Vista上进行测试,然后再去太远:) 24 9月. 082008-09-24 17:17:06


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

在那篇博客文章中,有人说有些视频卡驱动程序通过系统内存做了位图拷贝,也许更新视频博士提供者会有所帮助。 23 9月. 082008-09-23 19:21:48

  0

我再次检查,视频驱动程序已与最新的最新。我应该提到,这是发生在每个已经过测试的工作站上(其中约有10个) 23 9月. 082008-09-23 20:40:29