我在一台客户机器上销售一个WPF应用程序(几百个)整个应用程序窗口是黑色的,有人知道发生了什么吗?
该机器运行的是带有.net 3.5SP1的Windows XP,图形适配器是带有两个显示器的GeForce 6200(禁用一台显示器无法解决问题)。
将“兼容性设置”设置为“256色”可以解决问题(但这不是一个可行的解决方案,我需要更多颜色让应用看起来不错)。
该应用程序是yaTimer(http://www.nbdtech.com/yaTimer/),它具有基于“Office 2007 without Aero”部分中此帖http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx中所述技术的自定义窗口镶边。
如果有人能告诉我发生了什么,我会非常感激。
感谢。
答案 0 :(得分:8)
我们(www.novamind.com)过去有多个客户遇到类似的问题,而应用程序无法正确绘制或根本无法绘制。理由是:
这也可以提供帮助:
希望这会有所帮助。祝你好运。
答案 1 :(得分:1)
我遇到了覆盖窗口模板的问题。 我想通了如果你在Themes / Generic.xaml中继承窗口样式它可以工作。但在任何其他资源中,你将获得一个黑色的窗口。 (VS 2008 - WPF 3.5)
答案 2 :(得分:1)
可能的解决方法是强制进行软件模式渲染:
http://msdn.microsoft.com/en-us/library/system.windows.interop.rendermode.aspx
在3.5中,这可以基于每个窗口设置http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndtarget.rendermode%28VS.90%29.aspx,而在4.0中还有一个流程范围设置:http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.processrendermode.aspx
答案 3 :(得分:1)
调试时我遇到了与WPF应用程序相同的问题。 在Debug - Options中,导航到Debugging - General并取消选择"在应用程序中显示运行时工具"在"为XAML启用UI调试工具"下次运行应用程序时,它不会重叠表单。
答案 4 :(得分:0)
答案 5 :(得分:0)
尝试在客户端计算机上安装最新的DirectX软件包。
答案 6 :(得分:0)
我最近遇到了类似的问题,在WPF中使用黑色窗口,在VB 2010 / .Net 4.0解决方案中,其他每个窗口都工作得很好。罪魁祸首原来是我使用以下3个命令切换可见性的方式。解决方案是删除除第一行之外的所有行,具有Visibility属性引用的行(仅删除.Show行将导致它第一次正确呈现但之后为黑色):
Application.MisbehavingBlackWindow.Visibility = System.Windows.Visibility.Visible
Application.MisbehavingBlackWindow.Show()
Application.MisbehavingBlackWindow.Activate()
我从来没有遇到过显示WPF窗口的这一系列命令的问题,所以我想我陷入了困境,从不打扰检查它是否是最佳的解决方法;出于习惯,我只是根据需要粘贴代码来召唤窗口。它仍然适用于我曾编写的所有其他解决方案中的每个其他窗口,但它导致这个特定窗口变黑。起初它只是在一个特定的例程中间歇性地发生,然后由于未知原因而变成永久性的。我试验过的以下代码行没有任何区别:
Application.MisbehavingBlackWindow.InvalidateVisual()
Application.MisbehavingBlackWindow.InvalidateArrange()
Application.MisbehavingBlackWindow.UpdateLayout()
Application.MisbehavingBlackWindow.BringIntoView()
Application.MisbehavingBlackWindow.WindowState = WindowState.Minimized
Application.MisbehavingBlackWindow.WindowState = WindowState.Normal
剥离窗外的所有控件都没有效果;如果它只由一个TextBlock填充,它仍然会变黑。另一方面,在我尝试从其他例程执行它之后,确实出现了一个模式,特别是如果将第一个代码块粘贴到另一个调用另一个窗口的代码块中。如果我在下面的代码块之前插入它,则窗口变为黑色;如果我之后插入它,它就没有。
Application.OtherWindow.Visibility = System.Windows.Visibility.Visible
Application.OtherWindow.Show()
Application.OtherWindow.Activate()
即使使用Window.Hide()命令隐藏窗口,解决方案也可以工作(到目前为止)。我已经有一个包含在违规窗口内的事件Sub中,当窗口失去焦点时触发了该事件。使用Visibility属性将其切换回来仍然可以完成这一操作,而无需对该.Hide语句进行任何更改。
我希望这有助于任何遇到这个恼人问题的人。到目前为止,我所看到的大多数分散在互联网上的解决方案似乎都是基于Windows主题,显卡和其他外部变量之类的东西,但我们显然可以在我们的.Net中至少解决这个问题的一些实例。代码隐藏。
答案 7 :(得分:0)
如果您使用的是虚拟机,请禁用3D加速:)
答案 8 :(得分:0)
如果从窗口中删除初始网格,则会发生这种情况。 您总是需要一些东西作为基础,以便在窗口顶部显示控件,删除窗口中的所有内容并将控件添加到现在为空的窗口中,从而在您实际运行应用程序时使整个页面变黑。