Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF透明边框导致UI停止重新绘制_Wpf_User Interface_Transparency - Fatal编程技术网

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

WPF透明边框导致UI停止重新绘制,wpf,user-interface,transparency,Wpf,User Interface,Transparency,作为后续,我想知道如何正确使用透明窗口。如果我将窗口设置为使用透明度,UI偶尔会停止响应。实际发生的情况是,用户界面根本没有按应有的方式更新。动画不会出现,页面似乎无法导航;但是,如果您看到调试器单击按钮、链接等。。确实有效。最小化和恢复窗口会再次“捕获”UI,用户可以继续工作,直到行为恢复 如果删除透明边框,则不会发生该行为。我是否做错了什么,或者是否有其他设置、代码等。。。我需要实现它才能正确使用透明边界 下面是我对失败代码的窗口声明 <Window x:Class="MyProjec

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

您是在Windows XP SP2上使用.NET 3.0还是.NET 3.5?如果是这样的话,这就是透明窗口API的一个已知问题,该问题已在XP的.NET3.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版。

我想我终于找到了解决办法。从我所读到的一切来看,这个问题不应该发生在xpsp3和.net3.5sp1上,但它确实发生了

来自的示例显示了如何使用Win32 API函数创建不规则形状的窗口,这就是我正在做的。在使用这些技术对我的主窗口进行了修改之后,事情似乎按照预期进行,并且行为没有返回


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

在那篇博文中,有人说一些视频卡驱动程序通过系统内存。也许更新您的视频驱动程序会有所帮助。我仔细检查了一下,视频驱动程序已经是最新的。我应该提到的是,每台经过测试的工作站上都会出现这种情况(大约10台)根据我链接到的博客文章,这可能会在Vista上引起问题。如果你不需要支持它,那就太好了。如果需要,请确保在Vista上测试它,否则就太过分了:)