【问题标题】:WPF transparent borders causes the UI to stop redrawingWPF 透明边框导致 UI 停止重绘
【发布时间】:2010-09-12 11:29:39
【问题描述】:

作为my previous question 的后续行动,我想知道如何正确使用透明窗口。如果我将窗口设置为使用透明度,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" >

【问题讨论】:

    标签: wpf user-interface transparency


    【解决方案1】:

    您是在 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 的相应服务包。请注意,透明窗口仍然较慢,但没有那么糟糕。你可以找到更深入的讨论here

    【讨论】:

      【解决方案2】:

      我想我终于找到了解决方法。从我读过的所有内容来看,XP SP3 和 .NET 3.5 SP1 不应该出现这个问题,但确实如此。

      this blog post 的示例展示了如何使用 Win32 API 函数来创建一个不规则形状的窗口,这就是我正在做的事情。在修改我的主窗口以使用这些技术之后,事情似乎按预期工作并且行为未返回。

      另外值得注意的是,作者之所以推荐这种方法,是因为WPF和透明窗口的性能问题。虽然我相信它在 .NET 3.5 SP1 中可能会更好,但这并不难实现,而且性能应该更好。

      【讨论】:

      • 根据我链接到的博客文章,这可能会导致 Vista 出现问题。如果你不需要支持它,很好。如果你这样做了,一定要在 Vista 上测试它,然后再走得太远:)
      【解决方案3】:

      我在 Windows XP Pro SP3 上运行并使用 .NET 3.5 SP1。我还验证了该项目的目标是框架的 3.5 版。

      【讨论】:

      • 在那篇博文中,据说一些显卡驱动程序通过系统内存进行位图复制。也许更新您的视频驱动程序会有所帮助。
      • 我仔细检查过,视频驱动程序已经是最新的了。我应该提到这发生在每个经过测试的工作站上(大约 10 个)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      相关资源
      最近更新 更多