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

标签 wpf user-interface transparency

作为 my previous question 的后续行动,我想知道如何正确使用透明窗。如果我将窗口设置为使用透明度,UI 有时会出现停止响应的情况。实际发生的情况是 UI 根本没有按其应有的方式更新。不出现动画,页面似乎无法导航;然而,如果你观察调试器点击按钮、链接等......确实有效。最小化和恢复窗口会再次“ catch ”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" >

最佳答案

您在 Windows XP SP2 上使用 .NET 3.0 或 .NET 3.5 吗?如果是这样,这是透明窗口 API 的一个已知问题,已在 .NET 3.5 和 XP 的 SP3(我认为是 Vista 的 SP1)中修复。基本上,当您将AllowsTransparency 设置为True 时,WPF 管道必须以仅软件模式呈现。这将导致大多数系统的性能显着下降。

不幸的是,要解决此问题,您唯一可以做的就是升级到 .NET 3.0 SP1(包含在 .NET 3.5 中),并安装适用于 Windows 的相应服务包。请注意,透明窗口仍然较慢,但也没有那么糟糕。您可以找到更深入的讨论here .

关于WPF透明边框导致UI停止重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/122857/

相关文章:

c# - 无需显式重新创建的 WPF 刷新 CollectionView(Refresh() 方法调用)

c++ - qt中通过clicked函数直接执行一个batch

php - 'imagecolorat' 和透明度

c# - 应用程序资源中的 WPF 资源字典

c# - WPF Listview 组 header 不显示 : Any Ideas?

java - 从 Eclipse 导出 Java GUI map

android - 如何将共享按钮添加到 EditText 的文本选择栏?

java - 在透明窗口上绘制不透明内容

css - 在 div 中更改 div 的不透明度 - 这可能吗?如何?

c# - 将一个 child 附加到网格,设置它的行和列