win7 wpf popup 内嵌popup 鼠标不聚焦

win7上popup控件内嵌popup第二个pop控件不能被聚焦的问题

问题描述

前2天公司测试发现,在win7.net framerwork 4.5 一个页面控件显示有问题,而在另一台win7 (netframerwork 4.7)上面也没问题,并且在win10 上也没问题。

问题定位

在查阅资料和发现是wpf 的bug,因为 Popup 的句柄具有 WS_EX_NOACTIVATE 的特性,所以 Popup 是无法获得焦点。在微软的系统,所有的窗口、控件都是有句柄,句柄就是一个指针,获得他才知道是哪个控件。

问题解决

(由于不是我开发的)个人对popup控件内嵌popup我是不喜欢的,所以改了下交互。这里记录下,可以尝试参考站内另一个吧友的解决方法:URL : https://lindexi.blog.csdn.net/article/details/103184961

  • 问题补充:2022年1月26日16:28:16

  • 在开发中,又有小伙伴遇到了这个问题,就是popup内在嵌套一个popup。经过一天的研究得出了一个结论:第二个popup能不能获得鼠标焦点,取决于第一个popup属性的StaysOpen的设置。如果第一个popup设置StaysOpen=true的话,那么第二个popup是可以获得鼠标焦点的 。所以需要用popup内嵌套popup的话自己要动态控制下第一个popup属性的StaysOpen=true的状态。

  • 排查过程
    过程中看了下微软官网的焦点设置方法微软焦点概述链接。并且经过设置,发现第一个popup属性StaysOpen=false的话,设置键盘焦点和逻辑焦点是能定位到第二个popup的。而第二个popup鼠标焦点还是没有。然后尝试了下,把第一个popup属性设置为StaysOpen=true发现第二个popup是可以获取到鼠标焦点的。

  • 后续:细细想了下,如果第一个popup属性设置为StaysOpen=false如果使用win32的api把焦点设置为第二个popup,那么第一个popup失去了焦点,第二个popup也会隐藏,所以使用win32api(上面链接可查看)把第一个popup属性设置为StaysOpen=false,还想让第二个popup获取鼠标焦点的话,就是一个逻辑错误。

综合以上的分析,结合在排查问题的过程中,难怪翻墙都没有搜索到什么信息,其根本问题还是对popup并不是很了解。才会想出使用一个控件本身并不能满足交互需求的控件来实现这个交互!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值