WPF向我们保证了很多细节,但是其中一些并没有达到我们的预期。
一个例子是无边界窗口。 所以只需将这个简单的代码添加到窗口的Xaml:
AllowsTransparency="True" Background="Transparent" WindowStyle="None"
将使我看起来很好,就像这样:(忽略在屏幕剪辑期间他们弄乱的丑陋颜色) alt text http://img29.imageshack.us/img29/5759/withoutborder.png
难以置信? 是的!
它看起来不错,但一旦用户试图从ComboBox中select一些东西,他不能,因为它打开后面! – 在窗户后面。 当然,他看不到任何不实际的东西。
这是由于已知的Windows XP错误,更在这里 。
我有幸在XP机器上开发,否则我不会知道这件事,直到我的用户的负面反馈会打我…这让我想知道,为什么这个bug没有提到任何地方,在哪里这个“伟大的”透明的窗口function是解释(例如,书籍,MSDN等)
即使提到的修复(上面的链接)可以工作,我不会要求我的用户下载修补程序,只是为了让我的窗户看起来不错。 这就是为什么我正在寻找更好的解决scheme,也许有人想出了什么?
在那之前,我的窗户必须如下所示:
替代文字http://img29.imageshack.us/img29/1570/withborder.png
不是很高兴,因为你可以看到,所以你可以想象我的赞赏任何解决scheme。
更新:
同时我确认,这只是使用多个显示器(在我的情况下,扩展桌面)的一个问题。
安装修复程序后,问题完全消失(即使扩展桌面)。
下载修复虽然是一个痛苦。 为什么Microsoft让你给他们你的电子邮件,然后发送给你一个密码保护文件的链接,然后需要手动提取,才能最终安装错误修复?
他们认真吗?
他们不应该让用户简单地修复微软漏洞吗? 我怎么能告诉我的用户(他们可能不像我们的开发人员那样喜欢电脑)去一些网站,input邮件(哦,也是validation码 – 我想微软害怕电脑窃取他们的错误修复LOL),然后通过上面描述的过程?
不pipe怎么样,在这个问题变成一个完全不同的问题之前,我会停下来,这让我强调,现在更多的是寻找解决问题的方法。
是的,当一个像这样的功能在较旧的操作系统中无法正常工作,并且您需要支持时,这是很烦人的。 以下是我将如何解决它:
检查修复程序下载的Microsoft许可协议,确保以下内容合法
将提取的.exe添加到您的应用程序(作为单独的文件或在您的可执行文件中,使用GetManifestResourceStream,ReadAllBytes和WriteAllBytes提取)
当您的应用程序第一次启动时,请检查是否使用扩展桌面的XP,如果是,如果已经安装了修补程序或者您位于较新的服务包。 如果是这样,请将该事实缓存在注册表中,以便将来可以跳过检查。
如果您在使用扩展桌面的XP上,并且没有修补程序或最新的Service Pack,请将窗口背景更改为不透明,并启用菜单选项以安装此修补程序。
如果您是第一次以管理员身份运行,请弹出一个MessageBox,指出有一个允许窗口透明的修补程序,并询问您是否应该安装它。 如果用户说是,请运行修补程序安装。 如果他们说不,告诉他们菜单选项是可用的,如果他们将来改变主意。
或者,如果他们在XP上运行,你总是可以运行不透明的,并弹出一个消息,你的应用程序“在Vista或Windows 7上运行得更好”。