部分一

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. windows环境下安装配置MongoDB

    版本选择MongoDB的版本命名规范如:x.y.z: y为奇数时表示当前版本为开发版,如:2.3.0.2.1.1: y为偶数时表示当前版本为稳定版,如:2.0.1.2.2.0: 目前官网上最新的版本为 ...

  2. Razor_06 列表的查询

    Razor_06 列表的查询 列表的查询 同步/AJAX 查询 分局部视图[强类型] system.text.Json  Ajax 返回 Json 数据 , System.Text.Json .循环引 ...

  3. PHP+Ajax点击加载更多列表数据实例

    一款简单实用的PHP+Ajax点击加载更多列表数据实例,实现原理:通过“更多”按钮向服务端发送Ajax请求,PHP根据分页参数查询将最新的几条记录,数据以JSON形式返回,前台Query解析JSON数 ...

  4. Node.js提供了哪些内容(API)

    Nodejs运行时,JavaScript代码运行时的环境. 提供了一些核心模块,应用程序编程接口(Application Program Interface,API)  API 的意思就是.一个已经解 ...

  5. SoapUI、Postman测试WebService

    之前装了SoapUI,最近装了Postman,分别用它们测试了WebService,下面为用法. 测试的在线WebService(数据来源于中国气象局)Endpoint: http://www.web ...

  6. Linux—各种重要配置文件详解

    一./etc/profile文件详解(环境变量) 添加环境变量 .编辑profile文件 [root@localhost ~]# vi /etc/profile .在profile文件中添加如下内容 ...

  7. emacs 帮助相关命令

    emacs 帮助相关命令 如下表: No. 键盘操作 键盘操作对应的函数 回答的问题 01 ctrl-h c describe-key-briefly 这个按键组合将运行哪个函数 02 ctrl-h ...

  8. [PHP] PHP PDO与mysql的连接单例防止超时情况处理

    这个数据库类主要处理了单例模式下创建数据库对象时,如果有两次较长时间的间隔去执行sql操作,再次处理会出现连接失败的问题,利用一个cache数组存放pdo对象与时间戳,把两次执行之间的时间进行了比较, ...

  9. C++:map用法及元素的默认值

    C++:map用法 一.map基本用法 键值对 第一个参数为键的类型,第二个参数为值的类型. 源代码 #include <iostream> #include <string> ...

  10. 如何将list集合转成String对象

    使用Stringutils中的join方法: 方法一: public String listToString(List list, char separator) { return org.apach ...