Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象
部分一
14年底进入目前公司时,领导准备开发一款新软件平台以取代原有平台。原平台采用C++Build开发界面(window c/s客户端) 、Visual Studio(封装dll模块)。过完年,领导已把框架搭建完毕(过年期间领导加班了 _ )。当时菜鸟一个(目前老鸟了),新框架用wpf模式,RibbonWindow(界面功能按钮) + AvalonDock(界面布局,灵活好用),工具当然是最新的Visual Studio 2013了。虽然使用wpf开发,但是上位机软件客户不关心UI美观与否,只看功能是否强大。也因此本人只是把checkbox,Text等常用控件按照网上资料封装供自己调用,自定义控件方向没再继续往下研究。用的比较多的是用MVVM模式开发一些业务逻辑。绑定真的好用,View与ViewModel之间数据传输不需要在编写代码了。需求改变时,工作量也大大减轻了,从此步入新社会了。废话不多说,进入正题
16年中测试人员反馈,软件莫名其妙情况下,界面上一些输入控件无法响应键盘输入。接到反馈后,我们立即排查分析。
1、怀疑键盘消息没有传递到软件,但是现象出现时一部分控件可以输入,一部分无法输入,分分钟立刻打脸;
2、因无法输入的控件不是wpf本身提供控件,是一些mfc封装的窗口中的控件或者引用的winform控件如DataGridView,此时怀疑兼容性原因,看了微软官方资料,在窗口前添加
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(this)
还是无法解决问题。最终因能力不够只能临时搁浅此问题,采用临时方案,增加一个键盘输入窗口,当问题出现时,调用键盘输入窗口输入信息。
随着时间流失,我从小菜鸟变成了老菜鸟,但是该问题一直徘徊在我脑海中,无情嘲笑我,菜逼!!!
部分二
18年4月份,我重新回头查看此问题,主要看一下开源源码 以期能解决问题。无意中我发现了造成此现象的原因。
1、点击RibbonSplitButton按键一次,下拉菜单弹出,再点击一次下拉菜单收回。此时无法输入信息
2、点击RibbonSplitButton按键一次,下拉菜单弹出,再点击其它地方。此时无法输入信息
3、点击RibbonSplitButton按键一次。此时可以输入信息。
请看下图,操作步骤按照1、2、3进行
能重现问题,顿时感觉希望就在眼前。难道是RibbonSplitButton控件造成的,替换成RibbonMenuButton,结果还是一样。难不成重写一个控件?此方案放到最后吧,再想想其它思路。新在公司测试代码没法考出来,周末在自己电脑重新新建了一个工程。然而不管怎么点击,一直可以输入。难不成是我们平台其它bug造成的?天啊,平台开发3年多了,怎么去找问题,一个一个模块排除吗?终于,苦心人天不负,付出是有回报的。我发现自己新建工程中的RibbonWindow与公司不是同一个。公司引用Microsoft.Windows.Controls.Ribbon.RibbonWindow,而我引用System.Windows.Controls.Ribbon.RibbonWindow。
部分三
胜利就在眼前了,赶紧重新新建两个工程,分别引用Microsoft.Windows.Controls.Ribbon.RibbonWindow和System.Windows.Controls.Ribbon.RibbonWindow,其余代码不变。结果引用Microsoft.Windows.Controls.Ribbon.RibbonWindow出现键盘无法输入现象,另一个正常。
笔记
该问题只能说临时解决了,Microsoft.Windows.Controls.Ribbon.RibbonWindow库出现原因不清楚。也没在继续跟踪下去。准备在stackoverflow上提交一下该问题,目前还在研究怎么新建问题,头大...
Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象的更多相关文章
- ON_NOTIFY_REFLECT : Message Reflection for Windows Controls
转自: https://msdn.microsoft.com/en-us/library/eeah46xd.aspx TN062: Message Reflection for Windows Con ...
- (原创)用Microsoft Chart Controls(MSChart)实现曲线图,并支持拖动放大到秒
Microsoft Chart Controls(简称MSChart)控件,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式. MSChart 在.NET 4.0自 ...
- 用Microsoft Chart Controls(MSChart)实现曲线图,并支持拖动放大到秒
Microsoft Chart Controls(简称MSChart)控件,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式. MSChart 在.NET 4.0自 ...
- [C#] 老古董的 Microsoft Chart Controls 也可以进行数据预测
我要先声明,这篇文章介绍到的内容虽说不是不能用,但玩乐成分居多,大家看看就好,不要太认真. 1. Microsoft Chart Controls 中的 FinancialFormula 在上一篇文章 ...
- Microsoft Windows* SDK May 2010 或较新版本(兼容 2010 年 6 月 DirectX SDK)GPU Detect
原文链接 下载代码样本 特性/描述 日期: 2016 年 5 月 5 日 GPU Detect 是一种简短的示例,演示了检测系统中主要显卡硬件(包括第六代智能英特尔® 酷睿™ 处理器产品家族)的方式. ...
- 需要正确安装 Microsoft.Windows.ShellExperienceHost 和 "Microsoft.Windows.Cortana" 应用程序。
windows 10 开始菜单修复工具 Win10开始菜单修复工具出现的原因,自从升级到Windows 10,一直BUG不断,而其中有一个BUG非常的让你印象深刻,就是开始菜单无响应,你用着用着电脑 ...
- 驱动开发利器Microsoft Windows Driver Kit 7.1.0下载
在Windows 2000 与Windows XP 系统采用是WINDDK来开发WINDOWS驱动程序,我手头也有WINDDK,可是从Windows Vista开始之后,一般采用Microsoft W ...
- "Hello World!" for Microsoft Windows
"Hello World!" for Microsoft Windows It's time to write your first application! The follow ...
- C++ 无法将值写入注册表 HKEY_LOCAL_MACHINE\Sofeware\Microsoft\Windows\CurrentVersion\Run,以实现开机自启动应用程序。
C++ 无法将值写入注册表 HKEY_LOCAL_MACHINE\Sofeware\Microsoft\Windows\CurrentVersion\Run,以实现开机自启动应用程序.但可以写入到H ...
随机推荐
- CAD制图初学入门教程:怎么在CAD中绘制箭头
在接触CAD的时候大家有没有和小编一样感觉无所适从,所以下面就来和大家分享一个CAD制图初学入门教程,在CAD中绘制箭头.在CAD图形上进行标注内容的时候一般都会使用箭头来进行指示,那具体怎么在CAD ...
- Android自定义注解
1.元注解 概念:用来定义其他注解的注解,自定义注解的时候,需要使用它来定义我们的注解. 在jdk 1.5之后提供了 java.lang.annotation 来支持注解功能 常见的四种元 ...
- 最短时间(几秒内)利用C#往SQLserver数据库一次性插入10万条数据
用途说明: 公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储.于是在网上进行查找,发现了一个比较好的解决方案,就是采用SqlBul ...
- [PHP] vscode配置SFTP扩展同步文件
在我们的项目开发过程中,经常有一种模式,有一台linux的开发机作为我们的测试机器,上面安装了ftp服务.我们在windows系统的本地机器使用IDE编写代码,自动或者保存时同步上传到测试机下,这样就 ...
- Linux常见系统命令和远程管理命令
系统命令 时间与日期: date(查看系统时间) cal (查看本月日历) cal -y (查看一年12个月的日历) 磁盘信息: df -h (查看磁盘剩余空间) #重点放于过载点的/ 目录下 du ...
- web-never give up
打开题目连接 ?id=1 ,疑是注入点 但是输入其他数字无果 打开源码,发现注释有网页链接 打开连接123.206.87.240:8006/test/1p.html 发现回到了bugku的论坛首页,应 ...
- linux虚拟机安装python 及 配置环境变量
一.安装anaconda 下载anaconda安装包 (wget -P filepath 下载链接) linux下安装anaconda教程,并添加清华镜像 sh Anaconda3-5.3.1-Lin ...
- day82_10_31celery的使用
1.缓存 当一些数据需要固定地且频繁访问数据库时,需要使用到接口缓存. 以轮播图为例,每个用户都会访问首页,首页的轮播图长时间不会改变,所以可以使用cache,将固定数据保存到缓存中(redis),第 ...
- template指针小测试
测试结论: 1 函数指针 -- 使用形参固定的一系列函数作为某个函数的形参 -- callback机制 2 模板指针 -- 使用形参可变的一系列函数作为某个函数的形参 -- 3 typename -- ...
- python批量json文件转xml文件脚本(附代码)
场景:在使用了mask rcnn跑实验后标注了大量地json格式文件,现在打算使用yolo和faster rcnn 跑实验 所以需要将之前地json文件转为xml 但是找了很久,没发现有批量处 ...