Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象

article/2025/9/24 21:50:50

部分一

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上提交一下该问题,目前还在研究怎么新建问题,头大…

测试代码


http://chatgpt.dhexx.cn/article/NXLc27bd.shtml

相关文章

WPF实现选项卡效果(1)——使用AvalonDock

WPF实现选项卡效果(1)——使用AvalonDock 原文: WPF实现选项卡效果(1)——使用AvalonDock 简介 公司最近一个项目,软件采用WPF开发,需要实现类似于VS的选项卡(或者是浏览器的选项卡)效果。搜寻诸多资料后&a…

AvalonDock使用(2)-简单布局设置

在上一篇《AvalonDock的基本用法》中,我们使用AvalonDock控件,简单实现了,停靠左右两边的面板;这是面板的默认停靠位置;当然你也可以拖动它,让浮动,也可以让它停靠在其它地方; 通过简…

wpf-AvalonDock-使用技巧总结

LayoutAnchorable展示时的宽度 开始时LayoutAnchorable是隐藏的&#xff0c;控制展示时的宽度用 <avalondock:LayoutAnchorable Title"描述信息" AutoHideWidth"300">

Avalondock 第四步 边缘停靠

前一章介绍了分组功能&#xff0c;这一章主要介绍细节信息&#xff0c;LayoutRoot的side属性 LayoutRoot包含四个属性&#xff0c;LeftSide&#xff0c;RightSide,TopSide,BottomSide,分别用于展示DockingManager中左右上下四个位置的内容&#xff0c;但初始状态为隐藏状态。 …

Avalondock 第二步 创建文档面板

Avalondock 第二步 创建文档面板 上一篇已经介绍了如何创建一个停靠面板&#xff0c;本章主要介绍&#xff0c;文档面板的定义。文档面板和可停靠面板很相似 建立文档面板LayoutDocumentPane LayoutDocumentPane:文档窗格类&#xff0c;与LayoutAnchorablePane类似&#xff…

【AvalonDock】布局控件使用教程

1、Nuget 包 XceedProucts.Wpf.Toolkit.AvalonDock 包安装 2、安装完成&#xff0c;项目会引入这两个dll 3、在MainWindows窗体中引入命名空间 xmlns:avalon"http://schemas.xceed.com/wpf/xaml/avalondock" 4、Avalon 布局。 靠边隐藏窗口 LayoutRoot.LeftSid…

Avalondock 技巧之如何隐藏浮动面板停靠器

avalondock 技巧之如何隐藏浮动面板停靠器 之前开发的一个项目需要实现窗口的浮出&#xff0c;拖拽&#xff0c;停靠等功能&#xff0c;于是想到了神器Avalondock&#xff0c;这个框架功能相当强大&#xff0c;而且能实现多种主题样式的控件&#xff0c;特别是窗口的浮动停靠等…

[转]AVALONDOCK 2.0入门指南第一部分

AvalonDock 2.0可以用来为WPF创建一个类似Visual Studio的界面&#xff0c;深入理解如何使用AvalonDock进行开发是很重要的。 在这个入门指南里&#xff0c;我将演示如何开始使用AvalonDock&#xff0c;下面的文章都是基于2.0版本的。并且不能用于早期的版本。 AvalonDock是一个…

WPF AvalonDock拖拽布局学习整理

AvalonDock提供了一个系统&#xff0c;允许开发人员使用类似于许多流行的集成开发环境&#xff08;IDE&#xff09;中的窗口对接系统来创建可自定义的布局。 AvalonDock遵循MVVM设计。Model由Xceed.Wpf.AvalonDock.Layout命名空间中包含的类表示。此命名空间中的类是布局模型中…

WPFAvalonDock基本用法

本文简单介绍AvalonDock2.0基本用法&#xff0c;下载AvalonDock 2.0dll及主题http://avalondock.codeplex.com/ AvalonDock基本类介绍 DockingManager:停靠管理类&#xff0c;xaml中AvalonDock的根节点 LayoutRoot:布局根节点&#xff0c;有四个属性LeftSide,RightSide,TopS…

AvalonDock的基本用法

AvalonDock是优秀的开源项目&#xff0c;用于创建可停靠式布局&#xff0c;能够在WPF中方便开发出类似VS2010的软件界面。对于复杂的软件系统&#xff0c;大量控件的使用会使的界面变得难以管理。AvalonDock帮我们解决了这一问题。想要在WPF项目中使用AvalonDock的功能&#xf…

WPF随笔(十)--使用AvalonDock实现可停靠式布局

我们每天使用的许多软件都使用了可停靠式布局&#xff0c;可以方便的打开、关闭、收起、展开、移动选项卡。今天就来说明如何使用AvalonDock实现这种可停靠式布局。 AvalonDock安装 最新版本的AvalonDock类库包含在程序包Extended.Wpf.Toolkit中&#xff0c;属于Xceed旗下的一…

WPF AvalonDock 常用功能使用

AvalonDock是什么&#xff1f; AvalonDock是一个开源项目【GitHub - Dirkster99/AvalonDock: Our own development branch of the well known WPF document docking libraryGitHub - Dirkster99/AvalonDock: Our own development branch of the well known WPF docume…

WPF 第三方控件学习使用——可停靠布局控件(AvalonDock)

需求 近期在做公司上位机产品规划与实验&#xff0c;参考了Blender软件的布局风格&#xff0c;希望能用WPF也做一个类似布局的上位机。于是开始寻找资源&#xff0c;很快就发现了AvalonDock。 AvalonDock简介 AvalonDock是Xceed公司 Wpf.Toolkit 中的一款收费产品&#xff0…

wpf-AvalonDock基础-安装和更换主题

2022/7/29更新&#xff1a;去掉标题行的钉子 在LayoutAnchorable上添加属性&#xff1a; CanAutoHide"False" CanClose"False"如果要去掉X&#xff0c;再添加 CanHide"False"最近对wpf的多窗口排列问题深感头疼&#xff0c;算尺寸、位置太麻烦…

AvalonDock使用(1)-基本用法

AvalonDock的基本用法 介绍AvalonDock库中的基本类DockingManager&#xff1a;停靠管理器类LayoutRoot : 布局根节点类LayoutPanel&#xff1a;布局面板类LayoutAnchorablePane&#xff1a;可停靠窗格类LayoutAnchorable:可停靠内容类 LayoutDocumentPane:文档窗格类LayoutDocu…

十进制-75在计算机中,十进制数75转换成二进制数是多少?

75转换成二进制是&#xff1a;1001011。 75/237......1 37/218......1 18/29.........0 9/24...........1 4/22...........0 2/21...........0 从下往上读余数&#xff0c;就是整数部分的案1001011。拓展资料&#xff1a; 十进制整数转换为二进制整数方法&#xff1a; 十进制整…

二进制数的算术运算

2&#xff0c; 二进制数的算术运算 2.1 二进制数的算术运算 二进制数的算术运算包括加法、减法、乘法和除法。 1)加法运算 加法进位规则:逢二进一。 加法运算法则: 000 01101 1110(向高位进位) 例:(1101)2(1011)2?&#xff0c;解算如下: 从执行加法的过程可知&…

二进制数与十进制数的相互转换、二进制数的乘除运算、移位运算

二进制数与十进制数的转换 聊二进制数的运算前&#xff0c;我们先看看二进制数的值与十进制数的值是如何相互转换的&#xff0c; 十进制转换成二进制 将十进制数除以2&#xff0c;得到的商再除以2&#xff0c;依次类推直到商为1时为止&#xff0c;然后在旁边标出各步的余数&am…

计算机组成原理 二进制数的运算

1、算数运算 &#xff08;1&#xff09;加法运算 二进制加法法则为&#xff1a; 000 10011 110&#xff08;向邻近高位有进位&#xff09; 1111&#xff08;向邻近高位有进位&#xff09; &#xff08;2&#xff09;减法运算 二进制减法法则为&#xff1a; 0-00 1-10 1-01 0-1…