重叠windows bug的解决方案?

时间:2009-11-10 14:00:11

标签: wpf windows

WPF向我们承诺了许多细节,但其中一些不符合我们的期望。

一个例子是无边框窗口。所以只需将这个简单的代码添加到窗口的Xaml中:

AllowsTransparency="True"
Background="Transparent"
WindowStyle="None"

会让我看起来很漂亮:(忽略他们在屏幕剪辑过程中搞砸的丑陋色彩) alt text http://img29.imageshack.us/img29/5759/withoutborder.png

太好了,不是真的吗? 是的,是的!

它看起来不错,但是一旦用户试图从ComboBox中选择一些东西,他就不能,因为它打开了! - 在窗户后面是的。当然,他看不到任何不太实际的东西。

这是由于已知的Windows XP错误,更多是here

我很幸运能够在XP机器上进行开发,否则我不会发现这个问题,直到我的用户的负面反馈会打击我...这让我想知道,为什么这个bug没有提到任何地方,解释这个“伟大的”透明窗口功能(例如书籍,MSDN等)

即使提到的修复(上面的链接)可以工作,我也不会要求我的用户下载修补程序,只是为了让我的窗口看起来不错。 这就是为什么我在寻找更好的解决方案,也许有人想出了什么?

在那之前我的窗户必须看起来像这样:

alt text http://img29.imageshack.us/img29/1570/withborder.png

如你所见,不是很愉快,所以你可以想象我对任何解决方案的欣赏。

更新:

与此同时,我确认,这只是使用多台显示器时的一个问题(在我的案例中是扩展桌面)。

安装修复程序后,问题完全消失(即使使用扩展桌面)。

下载修复程序虽然很痛苦。为什么Microsoft会让你给他们你的电子邮件,然后发送一个密码保护文件的链接,然后需要手动提取,以便能够最终安装错误修复?

他们是认真的吗?

他们不应该让用户修复微软错误吗? 我怎样才能告诉我的用户(可能不像我们的开发人员那样倾向于计算机)去某个网站,输入电子邮件(哦和验证码 - 我想微软害怕计算机窃取他们的错误修复LOL)然后通过上述过程?

无论如何,在问题变成一个完全不同的问题之前我会停在这里,这使我强调现在更多的是我寻找问题的替代解决方案。

1 个答案:

答案 0 :(得分:0)

是的,当这样的功能在旧操作系统中不起作用并且您需要支持它时,这很烦人。以下是我将如何解决它:

  1. 检查Microsoft许可协议以获取修补程序下载,以确保以下内容合法

  2. 将解压缩的.exe添加到您的应用程序中(作为单独的文件或在您的可执行文件中,使用GetManifestResourceStream,ReadAllBytes和WriteAllBytes提取)

  3. 当您的应用程序第一次启动时,请检查您是否使用的是扩展桌面XP,如果是,如果已安装此修补程序,或者您使用的是较新的Service Pack。如果是这样,请在注册表中缓存该事实,以便将来可以跳过检查。

  4. 如果您使用的是具有扩展桌面的XP,并且没有此修补程序或最新的Service Pack,请将窗口背景更改为不透明,并启用菜单选项以安装此修补程序。

  5. 如果您是第一次以管理员身份运行,请弹出一个MessageBox,说明有一个允许窗口透明的修补程序,并询问您是否应该安装它。如果用户说是,请运行修补程序安装。如果他们拒绝,请告诉他们如果他们将来改变主意,可以使用菜单选项。

  6. 或者,如果它们在XP上运行,您可以始终运行opaque并弹出一条消息,表明您的应用程序“在Vista或Windows 7上运行得更好”。