作为上一个问题的跟进,我是想知道如何正确使用透明窗口。如果我已将窗口设置为使用透明度,则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版本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top