WPF透明边框导致UI停止重绘
-
02-07-2019 - |
题
作为上一个问题的跟进,我是想知道如何正确使用透明窗口。如果我已将窗口设置为使用透明度,则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&amp; .NET 3.5 SP1,但它是。
此博客文章中的示例展示了如何使用Win32 API函数创建一个不规则形状的窗口,这就是我正在做的事情。在重新设计我的主窗口以使用这些技术后,事情似乎按预期工作,并且行为没有返回。
还要注意的是,作者推荐此方法的原因是由于WPF和透明窗口的性能问题。虽然我认为它在.NET 3.5 SP1中可能会更好,但这并不难实现并且应该表现得更好。
其他提示
您是否在Windows XP SP2上使用.NET 3.0或.NET 3.5?如果是这样,这是透明窗口API的一个已知问题,已经在XP的.NET 3.5和SP3中修复了(我认为是Vista的SP1)。基本上,当您将AllowTransparency设置为True时,WPF管道必须以仅软件模式呈现。这将导致大多数系统的性能显着下降。
不幸的是,您唯一能做的就是升级到.NET 3.0 SP1(包含在.NET 3.5中),并安装适当的Windows Service Pack。请注意,透明窗口仍然较慢,但不是很差。您可以找到更深入的讨论此处。
我在Windows XP Pro SP3上运行并使用.NET 3.5 SP1。我还验证了该项目的目标是框架的3.5版本。