部分一

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.RibbonWindowSystem.Windows.Controls.Ribbon.RibbonWindow,其余代码不变。结果引用Microsoft.Windows.Controls.Ribbon.RibbonWindow出现键盘无法输入现象,另一个正常。

笔记

该问题只能说临时解决了,Microsoft.Windows.Controls.Ribbon.RibbonWindow库出现原因不清楚。也没在继续跟踪下去。准备在stackoverflow上提交一下该问题,目前还在研究怎么新建问题,头大...

测试代码

Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象的更多相关文章

  1. ON_NOTIFY_REFLECT : Message Reflection for Windows Controls

    转自: https://msdn.microsoft.com/en-us/library/eeah46xd.aspx TN062: Message Reflection for Windows Con ...

  2. (原创)用Microsoft Chart Controls(MSChart)实现曲线图,并支持拖动放大到秒

    Microsoft Chart Controls(简称MSChart)控件,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式. MSChart 在.NET 4.0自 ...

  3. 用Microsoft Chart Controls(MSChart)实现曲线图,并支持拖动放大到秒

    Microsoft Chart Controls(简称MSChart)控件,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式. MSChart 在.NET 4.0自 ...

  4. [C#] 老古董的 Microsoft Chart Controls 也可以进行数据预测

    我要先声明,这篇文章介绍到的内容虽说不是不能用,但玩乐成分居多,大家看看就好,不要太认真. 1. Microsoft Chart Controls 中的 FinancialFormula 在上一篇文章 ...

  5. Microsoft Windows* SDK May 2010 或较新版本(兼容 2010 年 6 月 DirectX SDK)GPU Detect

    原文链接 下载代码样本 特性/描述 日期: 2016 年 5 月 5 日 GPU Detect 是一种简短的示例,演示了检测系统中主要显卡硬件(包括第六代智能英特尔® 酷睿™ 处理器产品家族)的方式. ...

  6. 需要正确安装 Microsoft.Windows.ShellExperienceHost 和 "Microsoft.Windows.Cortana" 应用程序。

    windows 10 开始菜单修复工具 Win10开始菜单修复工具出现的原因,自从升级到Windows  10,一直BUG不断,而其中有一个BUG非常的让你印象深刻,就是开始菜单无响应,你用着用着电脑 ...

  7. 驱动开发利器Microsoft Windows Driver Kit 7.1.0下载

    在Windows 2000 与Windows XP 系统采用是WINDDK来开发WINDOWS驱动程序,我手头也有WINDDK,可是从Windows Vista开始之后,一般采用Microsoft W ...

  8. "Hello World!" for Microsoft Windows

    "Hello World!" for Microsoft Windows It's time to write your first application! The follow ...

  9. C++ 无法将值写入注册表 HKEY_LOCAL_MACHINE\Sofeware\Microsoft\Windows\CurrentVersion\Run,以实现开机自启动应用程序。

    C++  无法将值写入注册表 HKEY_LOCAL_MACHINE\Sofeware\Microsoft\Windows\CurrentVersion\Run,以实现开机自启动应用程序.但可以写入到H ...

随机推荐

  1. 一则SQL优化案例

    原始sql: select CASE ) counts ,) else deadline end as deadline from t_product_credit) c group by sort ...

  2. MySQL第三课

    首先创建一个数据库: CREATE DATABASE ku; Query OK, 1 row affected 查看一下是否有此数据库: SHOW DATABASES; +-------------- ...

  3. RAID 独立磁盘冗余阵列 - redundant array of independent disks

    RAID:  RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高. RAID ...

  4. 分布式系统ID的几种生成办法

    前言 一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给 ...

  5. softmax求导、cross-entropy求导及label smoothing

    softmax求导 softmax层的输出为 其中,表示第L层第j个神经元的输入,表示第L层第j个神经元的输出,e表示自然常数. 现在求对的导数, 如果j=i,   1 如果ji, 2 cross-e ...

  6. easyui三

    陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色.Vs前后端分离 美工 ...

  7. 【bzoj4559】[JLoi2016]成绩比较(dp+拉格朗日插值)

    bzoj 题意: 有\(n\)位同学,\(m\)门课. 一位同学在第\(i\)门课上面获得的分数上限为\(u_i\). 定义同学\(A\)碾压同学\(B\)为每一课\(A\)同学的成绩都不低于\(B\ ...

  8. Pwnable-cmd1

    ssh cmd1@pwnable.kr -p2222 (pw:guest) 先看一下c的源码 #include <stdio.h> #include <string.h> in ...

  9. 攻防世界Web-bug

    一直误以为是二次注入,看了别人wp,自己梳理了一遍 首先打开题目页面 先注册一个账号 注册成功(注意这个UID) 然后注意下包,发现cookie中的user很可疑,是一串md5值,我们可以推测是我们注 ...

  10. Navicat Premium 12连接MySQL时报错2059和1045的解决办法

    参考连接:https://www.jianshu.com/p/15876ad165f5 https://jingyan.baidu.com/article/c275f6ba479ca9e33d7567 ...