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?如果是这样,这是已在 .NET 3.5 和 XP 的 SP3(我认为是 Vista 的 SP1)中修复的透明窗口 API 的一个已知问题。基本上,当您将 AllowsTransparency 设置为 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 回答