我最近遇到了一个类似的问题,在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代码中显然修复此权限的一些实例 - 背后。
我也有同样的问题,通过使用相同的技术。 – VHanded 2011-03-09 01:53:23
你解决了这个问题吗? – 2011-08-11 15:02:33
@Luis Filipe - 不,我没有解决这个问题,遇到这个问题的客户决定换用不同的产品(并不令人意外),我也没有收到任何人对这个问题的抱怨,希望你找到解决方案 – Nir 2011-08-11 20:50:19