遇到问题该如何解决?
起因
在写一个桌面小应用的过程中,需要实现一个透明无边框,且不在任务栏显示图标的窗口。
透明无边框,且隐藏任务栏图标的窗口
问题1
为窗口添加Popup
或者Tooltip
属性,同时设置透明背景,即可达到上述效果,但问题是经过这样的设置之后,该窗口总是被置于其它窗口前面,遮挡了其它窗口。经过很长时间的搜索,也未能找到隐藏任务栏的同时,取消置顶的设置选项,似乎这两个属性被绑定在了一起。
正一筹莫展时,决定停止搜索,重新审视一下问题:最初的问题是,窗口置顶影响了后面窗口的显示与操作。因此可以看到,取消置顶并不是唯一的解决方法,一种替代的解决方法是:为该置顶窗口增加透明度,以显示出被遮挡的窗口。经试验,如果要让下层的窗口内容清晰可见,该窗口的透明度需要设置得相当大,这时窗口本身的内容很难辨识。为了双方能够正常显示,最终的解决方法是,当鼠标移动到置顶窗口时,置顶窗口透明,显示出下方的窗口内容,而鼠标移开时,恢复置顶窗口原来的状态。
比喻1
对于一个问题而言,其解决方法就像是地面上挖出的一个个坑,一种思维方式是看到其中一个坑就往里面跳(褒义),若此坑能直达目的也罢,但若在掉落过程中遇到坚硬的阻挡,但很难继续下去。另一种思维方式,在跳下之前在脚下绑上弹簧,若遇到无法突破的坚强之物,还能在弹簧的帮助下,回到原点,重新选择。
问题2
在鼠标移入置顶窗口的同时,为了能够对下方窗口的控件进行操作,需要将置顶窗口设置为忽略鼠标事件,从而将鼠标事件穿透到下方窗口。问题在于,当鼠标移入窗口忽略鼠标事件后,如何在鼠标移出时(因为此时忽略了鼠标事件从而检测不到鼠标移出事件),恢复窗口状态(恢复透明度和鼠标事件)。
经过一番思考,解决方法是:当鼠标移入时,设置一个定时器,500ms后,恢复置顶窗口的状态,若恢复时,鼠标仍在置顶窗口上,则会立刻再次检测到鼠标移入事件,重新修改状态并再次设置定时器,直到鼠标离开窗口后,在定时器的作用下,窗口最后一次恢复状态。
最终效果
比喻2
如果用手压住弹簧,那么弹簧会压缩,而当去“压住弹簧”这个条件后,弹簧自然会恢复原来的状态,这是因为弹簧始终有一个恢复状态的势。当在一个问题中,进入其中一种状态A的条件很明确,而进入其相对状态B的条件不明确时,即可以为状态B造一个势,当进入状态A的条件撤去之后,在势的作用下,事物将自然地进入状态B,从而问题得到解决。